自定义ActionBar+fragment实现页面切换

来源:互联网 发布:淘宝秒杀专区在哪 编辑:程序博客网 时间:2024/05/15 10:02

之前我们使用ViewPager+Fragment区域内头部导航,在Android 3.0之后Google增加了新的ActionBar,可方便的实现屏幕Head部区域的 设计如返回键、标题、ICON、Logo、自定义View以及菜单等,并可实现Tab导航,下面我们就使用ActionBar实现下图所示界面设计:

二、案例主要组件

  1、编写TBActivity

[java] view plaincopyprint?
  1. public class TBActivity extends Activity {  
  2.     private ActionBar actionBar;  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         setContentView(R.layout.activity_tb);  
  6.         initActionBar();  
  7.         initTab();  
  8.     }  
  9.     @SuppressLint("NewApi")  
  10.     private void initActionBar(){  
  11.         actionBar=super.getActionBar();//获得ActionBar  
  12.         actionBar.setDisplayShowHomeEnabled(true);//显示home区域  
  13.         actionBar.setDisplayHomeAsUpEnabled(true);//显示返回图片  
  14.         actionBar.setHomeAsUpIndicator(R.drawable.back);//设置返回图标  
  15.         //去除默认的ICON图标  
  16.          Drawable colorDrawable=new   
  17.                  ColorDrawable(android.R.color.transparent);  
  18.          actionBar.setIcon(colorDrawable);  
  19.          //设置自定义View  
  20.          actionBar.setDisplayShowCustomEnabled(true);  
  21.          actionBar.setCustomView(R.layout.head_logo);  
  22.          //设置导航模式为Tabs方式  
  23.          actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
  24.     }  
  25.     private void initTab(){  
  26.         Bundle bundle1=new Bundle();  
  27.         bundle1.putString("title""挖掘机区块信息");  
  28.         Tab tab1= actionBar.newTab().setText("挖掘机").setTabListener(  
  29.            new TabListener<FirstFragment>(this"挖掘机", FirstFragment.class,bundle1));  
  30.          actionBar.addTab(tab1);  
  31.            
  32.          Bundle bundle2=new Bundle();  
  33.          bundle2.putString("title""装载机区块信息");  
  34.          Tab tab2=actionBar.newTab().setText("装载机").setTabListener(  
  35.                   new TabListener<SecondFragment>(this"装载机",  
  36.  SecondFragment.class,bundle2));  
  37.          actionBar.addTab(tab2);  
  38.            
  39.          Bundle bundle3=new Bundle();  
  40.          bundle3.putString("title""平地机区块信息");  
  41.          Tab tab3=actionBar.newTab().setText("平地机").setTabListener(  
  42.                 new TabListener<ThirdFragment>(this,   
  43. "平地机",ThirdFragment.class,bundle3));  
  44.          actionBar.addTab(tab3);  
  45.          Bundle bundle4=new Bundle();  
  46.          bundle4.putString("title""更多区块信息");  
  47.          Tab tab4=actionBar.newTab().setText("更多").setTabListener(  
  48.                     new TabListener<FourFragment>(this,   
  49. "更多", FourFragment.class,bundle4));  
  50.          actionBar.addTab(tab4);              
  51.     }  
  52.     public boolean onCreateOptionsMenu(Menu menu) {  
  53.         // Inflate the menu; this adds items to the action bar if it is present.  
  54.         getMenuInflater().inflate(R.menu.tb, menu);  
  55.         return true;  
  56.     }  
  57.   
  58. }  

  2、TabListener组件

[java] view plaincopyprint?
  1. public class TabListener<T extends Fragment>   
  2. implements android.app.ActionBar.TabListener{  
  3.     private Fragment mFragment;  
  4.     private final Activity mActivity;  
  5.     private final String mTag;  
  6.     private final Class<T> mClass;  
  7.     private Bundle bundle;  
  8.     public TabListener(Activity activity, String tag, Class<T> clz,Bundle bundle) {  
  9.         mActivity = activity;  
  10.         mTag = tag;  
  11.         mClass = clz;  
  12.         this.bundle=bundle;  
  13.     }  
  14.   
  15.     @Override  
  16.     public void onTabSelected(Tab tab, FragmentTransaction ft) {  
  17.         // TODO Auto-generated method stub  
  18.         if(mFragment==null){  
  19.             mFragment=Fragment.instantiate(mActivity, mClass.getName());  
  20.             mFragment.setArguments(bundle);//向Fragment传递参数  
  21.             ft.add(android.R.id.content,mFragment, mTag);  
  22.         }else{  
  23.             ft.attach(mFragment);  
  24.         }      
  25.     }  
  26.     @Override  
  27.     public void onTabUnselected(Tab tab, FragmentTransaction ft) {  
  28.         if(mFragment!=null){  
  29.             ft.detach(mFragment);  
  30.         }  
  31.     }  
  32.     @Override  
  33.     public void onTabReselected(Tab tab, FragmentTransaction ft) {  
  34.   
  35.     }  
  36.   
  37. }  

  3、设计四个tab区域的Fragment

  分别为:(FirstFragment、SecondFragment、ThirdFragment、FourFragment),这里以FirstFragment为例(其他在这里无差别)

[java] view plaincopyprint?
  1. public class FirstFragment extends Fragment {  
  2.     private String title;  
  3.      @Override  
  4.     public void setArguments(Bundle bundle) {  
  5.         // TODO Auto-generated method stub  
  6.         title=bundle.getString("title");  
  7.     }  
  8.   
  9.     @Override  
  10.         public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  11.                 Bundle savedInstanceState) {  
  12.             TextView textView = new TextView(getActivity());  
  13.             textView.setText(title);  
  14.             textView.setTextSize(20);  
  15.             textView.setTextColor(Color.RED);  
  16.             textView.setGravity(Gravity.CENTER);  
  17.             LinearLayout layout = new LinearLayout(getActivity());  
  18.             LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);  
  19.             layout.addView(textView, params);  
  20.             return layout;  
  21.         }  
  22. }  

  4、定义ActionBar的样式

[html] view plaincopyprint?
  1.    <style name="MyActionBar" parent="@android:style/Theme.Holo.Light">  
  2.           <item name="android:actionBarStyle">@style/actionbar_style</item>  
  3.          <!--  给操作栏中的选项标签定义样式资源 -->  
  4.           <item name="android:actionBarTabStyle">@style/MyActionBarTabStyle</item>  
  5.           <!-- 给导航选项标签中的文本定义样式资源。 -->  
  6.           <item name="android:actionBarTabTextStyle">@style/MyActionBarTabTextStyle</item>       
  7.     </style>  
  8.        
  9.     <!-- actionbar样式 -->    
  10.     <style name="actionbar_style" parent="@android:style/Widget.Holo.Light.ActionBar">  
  11.         <item name="android:background">#EA4609</item>  
  12.     <item name="android:titleTextStyle">@style/ActionBar_titleStyle</item>  
  13.     <item name="android:icon">@android:color/transparent</item>   
  14.     <item name="android:itemPadding">20dip</item>   
  15.     </style>  
  16. <!-- Tab选项标签的样式 -->    
  17.  <style name="MyActionBarTabStyle"   
  18. parent="@android:style/Widget.Holo.Light.ActionBar.TabView">    
  19.      <item name="android:background">@drawable/tab_selector</item>  
  20.      <item name="android:paddingLeft">0dp</item>    
  21.      <item name="android:paddingRight">0dp</item>  
  22.         <item name="android:height">100dp</item>  
  23.   </style>    
  24.        <!-- Tab选项标签字体的样式 -->    
  25.  <style name="MyActionBarTabTextStyle"   
  26.         parent="@android:style/Widget.Holo.Light.ActionBar.TabText">            
  27.         <item name="android:textColor">#666666</item>    
  28.         <item name="android:textSize">18sp</item>       
  29. </style>  

在TBActivity上设置样式android:theme=” @style/MyActionBar

0 0
原创粉丝点击