android網易頂部導航欄demo

    隨着時間的推移現在的軟件要求顯示的內容越來越多,所以要在小的屏幕上能夠更好的顯示更多的內容,首先我們會想到底部菜單欄,但是有時候想網易新聞要顯示的內容太多,而且又想在主頁面全部顯示出來,所以有加了頂部導航欄,但是android這樣的移動設備內存是受限的,那麼多界面緩存到內存中,很容易導致內存溢出,這個是比較致命的,所以不得不考慮。雖然我在之前也做過網易的頂部導航欄但是哪種方式並不好,就像使用viewpager做一些複雜的界面由於圖片佔用內存過多,很容易導致內存溢出,學習了今天的內容大家做一下對比相信就有所體會。

              先看一下今天要實現的效果:

     

          至於頂部導航的具體要用到的圖片和佈局大家自己調整。

        由於前面已經介紹了底部菜單欄了,所以一些重複性的代碼就不貼上來了,最後我也會把下載地址貼上大家有興趣自行下載。

        首先看一些頂部導航欄的佈局文件:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.     <include layout="@layout/head" />  
  7.      
  8.   <LinearLayout   
  9.     android:layout_width="fill_parent"  
  10.     android:layout_height="wrap_content">  
  11.             <RadioGroup  
  12.                 android:id="@+id/add_tab_group"  
  13.                 android:layout_width="fill_parent"  
  14.                 android:layout_height="wrap_content"  
  15.                 android:gravity="center"  
  16.                 android:paddingTop="6dp"  
  17.                 android:paddingBottom="6dp"  
  18.                 android:background="@drawable/big_button_up"  
  19.                 android:orientation="horizontal"  
  20.                  >  
  21.   
  22.                 <RadioButton  
  23.                     android:id="@+id/main_tab_addExam"  
  24.                     style="@style/MMTabButton1"  
  25.                     android:layout_weight="1.0"  
  26.                     android:checked="true"  
  27.                     android:text="添加考試" />  
  28.   
  29.                 <RadioButton  
  30.                     android:id="@+id/main_tab_myExam"  
  31.                     style="@style/MMTabButton1"  
  32.                     android:layout_weight="1.0"  
  33.                      
  34.                     android:text="我的考試" />  
  35.   
  36.                 <RadioButton  
  37.                     android:id="@+id/main_tab_message"  
  38.                     style="@style/MMTabButton1"  
  39.                     android:layout_weight="1.0"  
  40.                     android:text="我的通知" />  
  41.   
  42.                 <RadioButton  
  43.                     android:id="@+id/main_tab_testing"  
  44.                     style="@style/MMTabButton1"  
  45.                     android:layout_weight="1.0"  
  46.                     android:text="測試" />  
  47.                 <RadioButton  
  48.                     android:id="@+id/main_tab_settings"  
  49.                     style="@style/MMTabButton1"  
  50.                     android:layout_weight="1.0"  
  51.                     android:text="設置" />  
  52.             </RadioGroup>  
  53.               
  54.        </LinearLayout>  
  55.          
  56.     <LinearLayout  
  57.         android:id="@+id/container"  
  58.         android:layout_width="fill_parent"  
  59.         android:layout_height="fill_parent"  
  60.         android:layout_weight="1" >  
  61.     </LinearLayout>  
  62. </LinearLayout>  
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <include layout="@layout/head" />
   
  <LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
            <RadioGroup
                android:id="@+id/add_tab_group"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:paddingTop="6dp"
                android:paddingBottom="6dp"
                android:background="@drawable/big_button_up"
                android:orientation="horizontal"
                 >

                <RadioButton
                    android:id="@+id/main_tab_addExam"
                    style="@style/MMTabButton1"
                    android:layout_weight="1.0"
                    android:checked="true"
                    android:text="添加考試" />

                <RadioButton
                    android:id="@+id/main_tab_myExam"
                    style="@style/MMTabButton1"
                    android:layout_weight="1.0"
                   
                    android:text="我的考試" />

                <RadioButton
                    android:id="@+id/main_tab_message"
                    style="@style/MMTabButton1"
                    android:layout_weight="1.0"
                    android:text="我的通知" />

                <RadioButton
                    android:id="@+id/main_tab_testing"
                    style="@style/MMTabButton1"
                    android:layout_weight="1.0"
                    android:text="測試" />
                <RadioButton
                    android:id="@+id/main_tab_settings"
                    style="@style/MMTabButton1"
                    android:layout_weight="1.0"
                    android:text="設置" />
            </RadioGroup>
            
       </LinearLayout>
       
    <LinearLayout
        android:id="@+id/container"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1" >
    </LinearLayout>
</LinearLayout>

      具體寬度樣式大家可以自己調節,然後看一下核心類:

  

  1. import android.app.ActivityGroup;  
  2. import android.app.AlertDialog;  
  3. import android.app.LocalActivityManager;  
  4. import android.content.Context;  
  5. import android.content.DialogInterface;  
  6. import android.content.Intent;  
  7. import android.os.Bundle;  
  8. import android.view.KeyEvent;  
  9. import android.view.View;  
  10. import android.view.animation.Animation;  
  11. import android.view.animation.AnimationUtils;  
  12. import android.widget.Button;  
  13. import android.widget.LinearLayout;  
  14. import android.widget.RadioGroup;  
  15. import android.widget.TextView;  
  16. import android.widget.RadioGroup.OnCheckedChangeListener;  
  17.   
  18. public class AddExamActivity extends ActivityGroup {  
  19.   
  20.     protected Button btn_leftTop, btn_rightTop;  
  21.     protected TextView tv_head;  
  22.       
  23.     private  static LocalActivityManager manager;  
  24.     private  RadioGroup radioGroup;  
  25.     private  static LinearLayout container;  
  26.     public  static Context context;  
  27.       
  28.     @Override  
  29.     protected void onCreate(Bundle savedInstanceState) {  
  30.         // TODO Auto-generated method stub  
  31.         super.onCreate(savedInstanceState);  
  32.         setContentView(R.layout.addexam);  
  33.         context=this;  
  34.         initHead();  
  35.           
  36.         manager=getLocalActivityManager();  
  37.         container= (LinearLayout)findViewById(R.id.container);  
  38.         radioGroup=(RadioGroup) this.findViewById(R.id.add_tab_group);  
  39.           
  40.         container.removeAllViews();  
  41.         container.addView(manager.startActivity(  
  42.                 "PAGE_0",  
  43.                 new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
  44.                 .getDecorView());  
  45.           
  46.         radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {  
  47.               
  48.             @Override  
  49.             public void onCheckedChanged(RadioGroup group, int checkedId) {  
  50.                 // TODO Auto-generated method stub  
  51.                 switch (checkedId) {  
  52.                 case R.id.main_tab_addExam://添加考試  
  53.                     container.removeAllViews();  
  54.                     container.addView(manager.startActivity(  
  55.                             "PAGE_0",  
  56.                             new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
  57.                             .getDecorView());  
  58.                     break;  
  59.                 case R.id.main_tab_myExam://我的考試  
  60.                     container.removeAllViews();  
  61.                     container.addView(manager.startActivity(  
  62.                             "PAGE_1",  
  63.                             new Intent(context, MyMessageActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
  64.                             .getDecorView());  
  65.                     break;  
  66.                 case R.id.main_tab_message://我的通知  
  67.                     container.removeAllViews();  
  68.                     container.addView(manager.startActivity(  
  69.                             "PAGE_2",  
  70.                             new Intent(context, SettingActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
  71.                             .getDecorView());  
  72.                     break;  
  73.                 case R.id.main_tab_testing://測試  
  74.                     container.removeAllViews();  
  75.                     container.addView(manager.startActivity(  
  76.                             "PAGE_3",  
  77.                             new Intent(context, TestingActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
  78.                             .getDecorView());  
  79.                     break;  
  80.                 case R.id.main_tab_settings://設置  
  81.                     container.removeAllViews();  
  82.                     container.addView(manager.startActivity(  
  83.                             "PAGE_4",  
  84.                             new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
  85.                             .getDecorView());  
  86.                     break;  
  87.                 default:  
  88.                     //tabHost.setCurrentTabByTag("我的考試");  
  89.                     break;  
  90.                 }  
  91.             }  
  92.         });  
  93.     }  
  94.     public static void changeTo(){  
  95.         Animation slideLeftIn = AnimationUtils.loadAnimation(context, R.anim.slide_bottom_in_no_alpha);  
  96.           
  97.         container.removeAllViews();  
  98.         container.addView(manager.startActivity(  
  99.                 "PAGE_4",  
  100.                 new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
  101.                 .getDecorView());  
  102.         container.startAnimation(slideLeftIn);  
  103.     }  
  104.     protected void initHead() {  
  105.         btn_leftTop = (Button) findViewById(R.id.btn_leftTop);  
  106.         btn_rightTop = (Button) findViewById(R.id.btn_rightTop);  
  107.         tv_head = (TextView) findViewById(R.id.tv_head);  
  108.           
  109.         btn_leftTop.setVisibility(View.INVISIBLE);  
  110.         tv_head.setText("添加考試");  
  111.     }  
  112.       
  113.    @Override  
  114.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  115.         // TODO Auto-generated method stub  
  116.   
  117.         if (keyCode == KeyEvent.KEYCODE_BACK) {  
  118.   
  119.             AlertDialog.Builder builder = new AlertDialog.Builder(getParent());  
  120.             builder.setMessage("你確定退出嗎?")  
  121.                     .setCancelable(false)  
  122.                     .setPositiveButton("確定",  
  123.                             new DialogInterface.OnClickListener() {  
  124.                                 public void onClick(DialogInterface dialog,  
  125.                                         int id) {  
  126.                                     finish();  
  127.                                     System.exit(0);  
  128.                                 }  
  129.                             })  
  130.                     .setNegativeButton("返回",  
  131.                             new DialogInterface.OnClickListener() {  
  132.                                 public void onClick(DialogInterface dialog,  
  133.                                         int id) {  
  134.                                     dialog.cancel();  
  135.                                 }  
  136.                             });  
  137.             AlertDialog alert = builder.create();  
  138.             alert.show();  
  139.             return true;  
  140.         }  
  141.   
  142.         return super.onKeyDown(keyCode, event);  
  143.     }  
  144. }  
import android.app.ActivityGroup;
import android.app.AlertDialog;
import android.app.LocalActivityManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class AddExamActivity extends ActivityGroup {

	protected Button btn_leftTop, btn_rightTop;
	protected TextView tv_head;
	
	private  static LocalActivityManager manager;
	private  RadioGroup radioGroup;
	private  static LinearLayout container;
	public  static Context context;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.addexam);
		context=this;
		initHead();
		
		manager=getLocalActivityManager();
		container= (LinearLayout)findViewById(R.id.container);
        radioGroup=(RadioGroup) this.findViewById(R.id.add_tab_group);
        
        container.removeAllViews();
		container.addView(manager.startActivity(
				"PAGE_0",
				new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
				.getDecorView());
        
        radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				// TODO Auto-generated method stub
				switch (checkedId) {
				case R.id.main_tab_addExam://添加考試
					container.removeAllViews();
					container.addView(manager.startActivity(
							"PAGE_0",
							new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
							.getDecorView());
					break;
				case R.id.main_tab_myExam://我的考試
					container.removeAllViews();
					container.addView(manager.startActivity(
							"PAGE_1",
							new Intent(context, MyMessageActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
							.getDecorView());
					break;
				case R.id.main_tab_message://我的通知
					container.removeAllViews();
		            container.addView(manager.startActivity(
		            		"PAGE_2",
		                    new Intent(context, SettingActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
		                    .getDecorView());
					break;
				case R.id.main_tab_testing://測試
					container.removeAllViews();
		            container.addView(manager.startActivity(
		            		"PAGE_3",
		                    new Intent(context, TestingActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
		                    .getDecorView());
					break;
				case R.id.main_tab_settings://設置
					container.removeAllViews();
		            container.addView(manager.startActivity(
		            		"PAGE_4",
		                    new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
		                    .getDecorView());
					break;
				default:
					//tabHost.setCurrentTabByTag("我的考試");
					break;
				}
			}
		});
	}
    public static void changeTo(){
    	Animation slideLeftIn = AnimationUtils.loadAnimation(context, R.anim.slide_bottom_in_no_alpha);
    	
    	container.removeAllViews();
        container.addView(manager.startActivity(
        		"PAGE_4",
                new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                .getDecorView());
        container.startAnimation(slideLeftIn);
    }
	protected void initHead() {
		btn_leftTop = (Button) findViewById(R.id.btn_leftTop);
		btn_rightTop = (Button) findViewById(R.id.btn_rightTop);
		tv_head = (TextView) findViewById(R.id.tv_head);
		
		btn_leftTop.setVisibility(View.INVISIBLE);
		tv_head.setText("添加考試");
	}
	
   @Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub

		if (keyCode == KeyEvent.KEYCODE_BACK) {

			AlertDialog.Builder builder = new AlertDialog.Builder(getParent());
			builder.setMessage("你確定退出嗎?")
					.setCancelable(false)
					.setPositiveButton("確定",
							new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog,
										int id) {
									finish();
									System.exit(0);
								}
							})
					.setNegativeButton("返回",
							new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog,
										int id) {
									dialog.cancel();
								}
							});
			AlertDialog alert = builder.create();
			alert.show();
			return true;
		}

		return super.onKeyDown(keyCode, event);
	}
}

      這裏繼承了ActivityGroup,沒有使用過的朋友從百度搜索下就明白了。

     使用了LocalActivityManager啓動子activity,這裏Context和LinearLayout使用了static靜態的,這是因爲變態的需求使我不得不這樣做,希望大家不要把這兩個變量設置成static的,因爲static的生命週期很長特別是Context不要設置成static,這樣的話當前的activity很難被銷燬的。其實使用tabhost完全可以實現,但是爲什麼沒使用tabhost的我相信大家都明白,如果不考慮內存的話我也會使用,哈哈!

    

      最後附上下載地址,有興趣大家自己下載吧!點擊打開鏈接

發佈了2 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章