国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android項目實戰(zhàn)之仿網(wǎng)易頂部導(dǎo)航欄效果

2019-12-12 06:19:45
字體:
供稿:網(wǎng)友

隨著時間的推移現(xiàn)在的軟件要求顯示的內(nèi)容越來越多,所以要在小的屏幕上能夠更好的顯示更多的內(nèi)容,首先我們會想到底部菜單欄,但是有時候想網(wǎng)易新聞要顯示的內(nèi)容太多,而且又想在主頁面全部顯示出來,所以有加了頂部導(dǎo)航欄,但是Android這樣的移動設(shè)備內(nèi)存是受限的,那么多界面緩存到內(nèi)存中,很容易導(dǎo)致內(nèi)存溢出,這個是比較致命的,所以不得不考慮。雖然我在之前也做過網(wǎng)易的頂部導(dǎo)航欄但是方式并不好,就像使用viewpager做一些復(fù)雜的界面由于圖片占用內(nèi)存過多,很容易導(dǎo)致內(nèi)存溢出,學(xué)習(xí)了今天的內(nèi)容大家做一下對比相信就有所體會。<

先看一下今天要實現(xiàn)的效果:

至于頂部導(dǎo)航的具體要用到的圖片和布局大家自己調(diào)整。

由于前面已經(jīng)介紹了底部菜單欄了,所以一些重復(fù)性的代碼就不貼上來了,最后我也會把下載地址貼上大家有興趣自行下載。

首先看一些頂部導(dǎo)航欄的布局文件:

<?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="設(shè)置" />  </RadioGroup>   </LinearLayout>   <LinearLayout  android:id="@+id/container"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:layout_weight="1" >  </LinearLayout> </LinearLayout> 

具體寬度樣式大家可以自己調(diào)節(jié),然后看一下核心類:

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://設(shè)置   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靜態(tài)的,這是因為變態(tài)的需求使我不得不這樣做,希望大家不要把這兩個變量設(shè)置成static的,因為static的生命周期很長特別是Context不要設(shè)置成static,這樣的話當(dāng)前的activity很難被銷毀的。其實使用tabhost完全可以實現(xiàn),但是為什么沒使用tabhost的我相信大家都明白,如果不考慮內(nèi)存的話我也會使用。

以上就是本文的全部內(nèi)容,希望能給大家一個參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 辽源市| 巴中市| 沭阳县| 启东市| 漠河县| 安陆市| 巴楚县| 东乡县| 鹰潭市| 定陶县| 洪江市| 延安市| 托里县| 泰来县| 万荣县| 永登县| 新乡县| 诏安县| 东乌珠穆沁旗| 山西省| 岳普湖县| 宜城市| 德江县| 阿拉善盟| 察哈| 灌云县| 玉环县| 淮安市| 通州市| 阿鲁科尔沁旗| 历史| 新平| 应用必备| 辽源市| 若尔盖县| 乐至县| 宁陕县| 全南县| 邵阳市| 玛曲县| 崇礼县|