Adnroid ActionBar 各种用法

来源:互联网 发布:中国新闻周刊 知乎 编辑:程序博客网 时间:2024/05/17 03:46

http://blog.csdn.net/lllkey/article/details/11529129

一. 基础用法-显示和隐藏

1. 在xml中显示活隐藏

如果你不想要Action bar,把Activity的主题设置为Theme.Holo.NoActionBar就可以了

[html] view plaincopy
  1. <activity android:theme="@android:style/Theme.Holo.NoActionBar">  

2. 在Activity中显示活隐藏

先得到Actionbar对象,再对其进行操作:show()或者hide()

[java] view plaincopy
  1. ActionBar actionBar = getActionBar();    
  2. actionBar.hide();    

在隐藏和删除Action bar时,也许回使Activity重新布局。如果不想重新布局可以使用覆盖模式。覆盖模式在Activity的顶部描画操作栏,而不是在它们所拥有的屏幕的区域。这样,布局可以保持不变。要使用覆盖模式,就要给Activity创建一个主题,并且把android:windowActionBarOverlay属性设置为true。
       提示:如果你有一个删除了Action bar的Activity主题,它把android:windowActionBar样式属性设置为false。但是,如果你使用了这个主题,创建窗口将不允许Action bar再显示,这时getActionBar()方法将返回null。

3. 其他的一些属性

actionBar.setDisplayHomeAsUpEnabled(true)    // 给左上角图标的左边加上一个返回的图标 。对应ActionBar.DISPLAY_HOME_AS_UP
actionBar.setDisplayShowHomeEnabled(true)   //使左上角图标可点击,对应id为android.R.id.home,对应ActionBar.DISPLAY_SHOW_HOME
actionBar.setDisplayShowCustomEnabled(true)  // 使自定义的普通View能在title栏显示,即actionBar.setCustomView能起作用,对应ActionBar.DISPLAY_SHOW_CUSTOM
actionBar.setDisplayShowTitleEnabled(true)   //对应ActionBar.DISPLAY_SHOW_TITLE

actionBar.hide()   //  影藏标题栏
actionBar.show()  // 显示标题栏

二. ActionBar与ViewPager结合使用

实例:主Activity:
viewpager的每个页面暂时用android自带的layout代替,可以替换做其他layout
[java] view plaincopy
  1. public class MainActionBarUnionVp extends Activity implements TabListener,  
  2.         OnPageChangeListener {  
  3.     private ActionBar actionBar;  
  4.     private ViewPager viewPager;  
  5.     private List<View> viewList;  
  6.     private MainPageAdapter viewPagerAdapter;  
  7.   
  8.     @Override  
  9.     public void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.actionbar_unionvp_main);  
  12.         viewPager = (ViewPager) findViewById(R.id.view_pager);  
  13.         actionBar = getActionBar();  
  14.         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
  15.         actionBar.setDisplayShowTitleEnabled(false);  
  16.         actionBar.setDisplayShowHomeEnabled(true);  
  17.         Tab tab = actionBar.newTab().setText("第一页").setTabListener(this);  
  18.         actionBar.addTab(tab);  
  19.   
  20.         tab = actionBar.newTab().setText("第二页").setTabListener(this);  
  21.         actionBar.addTab(tab);  
  22.   
  23.         tab = actionBar.newTab().setText("第三页").setTabListener(this);  
  24.         actionBar.addTab(tab);  
  25.         viewList = new ArrayList<View>();  
  26.         View view1 = (View) View.inflate(this,  
  27.                 android.R.layout.activity_list_item, null);  
  28.         View view2 = (View) View.inflate(this,  
  29.                 android.R.layout.expandable_list_content, null);  
  30.         View view3 = (View) View.inflate(this,  
  31.                 android.R.layout.simple_dropdown_item_1line, null);  
  32.         viewList.add(view1);  
  33.         viewList.add(view2);  
  34.         viewList.add(view3);  
  35.         viewPagerAdapter = new MainPageAdapter();  
  36.         viewPager.setAdapter(viewPagerAdapter);  
  37.         viewPager.setCurrentItem(0);  
  38.         viewPager.setOnPageChangeListener(this);  
  39.     }  
  40.   
  41.     @Override  
  42.     public void onPageScrollStateChanged(int arg0) {  
  43.     }  
  44.   
  45.     @Override  
  46.     public void onPageScrolled(int arg0, float arg1, int arg2) {  
  47.     }  
  48.   
  49.     @Override  
  50.     public void onPageSelected(int arg0) {  
  51.         actionBar.getTabAt(arg0).select();  
  52.     }  
  53.   
  54.     public class MainPageAdapter extends PagerAdapter {  
  55.         @Override  
  56.         public Object instantiateItem(ViewGroup container, int position) {  
  57.             View view = viewList.get(position);  
  58.             viewPager.addView(view);  
  59.             return view;  
  60.         }  
  61.   
  62.         @Override  
  63.         public void destroyItem(ViewGroup container, int position, Object object) {  
  64.             container.removeView(viewList.get(position));  
  65.         }  
  66.   
  67.         @Override  
  68.         public int getCount() {  
  69.             return viewList.size();  
  70.         }  
  71.   
  72.         @Override  
  73.         public boolean isViewFromObject(View arg0, Object arg1) {  
  74.             return arg0 == arg1;  
  75.         }  
  76.   
  77.     }  
  78.   
  79.     @Override  
  80.     public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {  
  81.   
  82.     }  
  83.   
  84.     @Override  
  85.     public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {  
  86.         viewPager.setCurrentItem(tab.getPosition());  
  87.     }  
  88.   
  89.     @Override  
  90.     public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {  
  91.   
  92.     }  
  93. }  
layout 文件:actionbar_nuionvp_main.xml
[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <FrameLayout 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.   
  7.     <android.support.v4.view.ViewPager  
  8.         android:id="@+id/view_pager"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="fill_parent" />  
  11.   
  12. </FrameLayout>  
在AndroidManifest里的Activity加上属性android:uiOptions="splitActionBarWhenNarrow"后,普通ActionBar将不再显示在标题栏部分,而是显示在屏幕底部

三. ActionBar中添加下拉菜单

下拉菜单的实现主要是添加一个Spinner
在ActionBar中添加下拉菜单,主要有一下几个关键步骤:
  1. 生成一个SpinnerAdapter,设置ActionBar的下拉菜单的菜单项
  2. 实现ActionBar.OnNavigationListener接口,当点击ActionBar的菜单项是进行相应的操作
  3. 调用setNavigationMode()方法将ActionBar的操作模型设置为ActionBar.NAVIGATION_MODE_LIST. 注意:这个步骤应该在Activity的onCreate()回调函数时执行
  4. 调用setListNavigationCallbacks()方法为ActionBar添加适配器和监听器.

其中mSpinnerAdapter是spinnerAdapter的对象,mOnNavigationListener是ActionBar.OnNavigationListener的对象。
首先添加显示下拉列表的内容:在string.xml的resources节点中添加
[html] view plaincopy
  1. <string-array name="actionbar_student">  
  2.     <item>邓名侨</item>  
  3.     <item>刘天喜</item>  
  4.     <item>其黄石</item>  
  5.     <item>蔡宏远</item>  
  6. </string-array>  


为了对actionbar初始化,在Activity中的onCreate函数中添加:
[java] view plaincopy
  1. // 生成一个SpinnerAdapter  
  2.     SpinnerAdapter adapter = ArrayAdapter.createFromResource(this,  
  3.             R.array.actionbar_student, android.R.layout.simple_spinner_dropdown_item);  
  4.     // 得到ActionBar  
  5.     ActionBar actionBar = getActionBar();  
  6.     // 将ActionBar的操作模型设置为NAVIGATION_MODE_LIST  
  7.     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);  
  8.     // 为ActionBar设置下拉菜单和监听器  
  9.     actionBar.setListNavigationCallbacks(adapter, new DropDownListenser());  
其中类DropDownListenser为:
[java] view plaincopy
  1. /** 
  2.  * * 实现 ActionBar.OnNavigationListener接口 
  3.  */  
  4. class DropDownListenser implements OnNavigationListener {  
  5.     // 得到和SpinnerAdapter里一致的字符数组  
  6.     String[] listNames = getResources().getStringArray(  
  7.             R.array.actionbar_student);  
  8.   
  9.     /* 当选择下拉菜单项的时候,将Activity中的内容置换为对应的Fragment */  
  10.     public boolean onNavigationItemSelected(int itemPosition, long itemId) {  
  11.         // 生成自定的Fragment  
  12.         FragmentDropList student = new FragmentDropList();  
  13.         FragmentManager manager = getSupportFragmentManager();  
  14.         FragmentTransaction transaction = manager.beginTransaction();  
  15.         // 将Activity中的内容替换成对应选择的Fragment  
  16.         transaction.replace(R.id.droplist_content, student, listNames[itemPosition]);  
  17.         transaction.commit();  
  18.         return true;  
  19.     }  
  20. }  

其中 transaction.replace函数中第一个参数是定义要换内容的Fragment的布局,我用的是LinearLayout
FragmentDropList为Fragment类,类中只用了一个TextView显示选择的内容
[java] view plaincopy
  1. public class FragmentDropList extends Fragment {  
  2.     // Fragment对应的标签,当Fragment依附于Activity时得到   
  3.     private String tag;  
  4.   
  5.     @Override  
  6.     public void onAttach(Activity activity) {  
  7.         super.onAttach(activity);  
  8.         tag = getTag();  
  9.     }  
  10.   
  11.     @Override  
  12.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  13.             Bundle savedInstanceState) {  
  14.         TextView textView = new TextView(getActivity());  
  15.         textView.setText(tag);  
  16.         return textView;  
  17.     }  
  18. }  





参考:
http://blog.csdn.net/pipisky2006/article/details/8521834
http://my.oschina.net/eclipse88/blog/82715
http://blog.csdn.net/liu149339750/article/details/8282471

0 0
原创粉丝点击