Adnroid ActionBar 各種用法

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

一. 基礎用法-顯示和隱藏
1. 在xml中顯示活隱藏

如果你不想要Action bar,把Activity的主題設置爲Theme.Holo.NoActionBar就可以了
[html] view plaincopy

<activity android:theme="@android:style/Theme.Holo.NoActionBar">  
  1. 在Activity中顯示活隱藏

先得到Actionbar對象,再對其進行操作:show()或者hide()
[java] view plaincopy

ActionBar actionBar = getActionBar();    
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

public class MainActionBarUnionVp extends Activity implements TabListener,  
        OnPageChangeListener {  
    private ActionBar actionBar;  
    private ViewPager viewPager;  
    private List<View> viewList;  
    private MainPageAdapter viewPagerAdapter;  

    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.actionbar_unionvp_main);  
        viewPager = (ViewPager) findViewById(R.id.view_pager);  
        actionBar = getActionBar();  
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
        actionBar.setDisplayShowTitleEnabled(false);  
        actionBar.setDisplayShowHomeEnabled(true);  
        Tab tab = actionBar.newTab().setText("第一頁").setTabListener(this);  
        actionBar.addTab(tab);  

        tab = actionBar.newTab().setText("第二頁").setTabListener(this);  
        actionBar.addTab(tab);  

        tab = actionBar.newTab().setText("第三頁").setTabListener(this);  
        actionBar.addTab(tab);  
        viewList = new ArrayList<View>();  
        View view1 = (View) View.inflate(this,  
                android.R.layout.activity_list_item, null);  
        View view2 = (View) View.inflate(this,  
                android.R.layout.expandable_list_content, null);  
        View view3 = (View) View.inflate(this,  
                android.R.layout.simple_dropdown_item_1line, null);  
        viewList.add(view1);  
        viewList.add(view2);  
        viewList.add(view3);  
        viewPagerAdapter = new MainPageAdapter();  
        viewPager.setAdapter(viewPagerAdapter);  
        viewPager.setCurrentItem(0);  
        viewPager.setOnPageChangeListener(this);  
    }  

    @Override  
    public void onPageScrollStateChanged(int arg0) {  
    }  

    @Override  
    public void onPageScrolled(int arg0, float arg1, int arg2) {  
    }  

    @Override  
    public void onPageSelected(int arg0) {  
        actionBar.getTabAt(arg0).select();  
    }  

    public class MainPageAdapter extends PagerAdapter {  
        @Override  
        public Object instantiateItem(ViewGroup container, int position) {  
            View view = viewList.get(position);  
            viewPager.addView(view);  
            return view;  
        }  

        @Override  
        public void destroyItem(ViewGroup container, int position, Object object) {  
            container.removeView(viewList.get(position));  
        }  

        @Override  
        public int getCount() {  
            return viewList.size();  
        }  

        @Override  
        public boolean isViewFromObject(View arg0, Object arg1) {  
            return arg0 == arg1;  
        }  

    }  

    @Override  
    public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {  

    }  

    @Override  
    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {  
        viewPager.setCurrentItem(tab.getPosition());  
    }  

    @Override  
    public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {  

    }  
}  

layout 文件:actionbar_nuionvp_main.xml
[html] view plaincopy

<?xml version="1.0" encoding="utf-8"?>  
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical" >  

    <android.support.v4.view.ViewPager  
        android:id="@+id/view_pager"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent" />  

</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

<string-array name="actionbar_student">  
    <item>鄧名僑</item>  
    <item>劉天喜</item>  
    <item>其黃石</item>  
    <item>蔡宏遠</item>  
</string-array>  

爲了對actionbar初始化,在Activity中的onCreate函數中添加:
[java] view plaincopy

// 生成一個SpinnerAdapter  
    SpinnerAdapter adapter = ArrayAdapter.createFromResource(this,  
            R.array.actionbar_student, android.R.layout.simple_spinner_dropdown_item);  
    // 得到ActionBar  
    ActionBar actionBar = getActionBar();  
    // 將ActionBar的操作模型設置爲NAVIGATION_MODE_LIST  
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);  
    // 爲ActionBar設置下拉菜單和監聽器  
    actionBar.setListNavigationCallbacks(adapter, new DropDownListenser());  

其中類DropDownListenser爲:
[java] view plaincopy

/** 
 * * 實現 ActionBar.OnNavigationListener接口 
 */  
class DropDownListenser implements OnNavigationListener {  
    // 得到和SpinnerAdapter裏一致的字符數組  
    String[] listNames = getResources().getStringArray(  
            R.array.actionbar_student);  

    /* 當選擇下拉菜單項的時候,將Activity中的內容置換爲對應的Fragment */  
    public boolean onNavigationItemSelected(int itemPosition, long itemId) {  
        // 生成自定的Fragment  
        FragmentDropList student = new FragmentDropList();  
        FragmentManager manager = getSupportFragmentManager();  
        FragmentTransaction transaction = manager.beginTransaction();  
        // 將Activity中的內容替換成對應選擇的Fragment  
        transaction.replace(R.id.droplist_content, student, listNames[itemPosition]);  
        transaction.commit();  
        return true;  
    }  
}  

其中 transaction.replace函數中第一個參數是定義要換內容的Fragment的佈局,我用的是LinearLayout
FragmentDropList爲Fragment類,類中只用了一個TextView顯示選擇的內容
[java] view plaincopy

public class FragmentDropList extends Fragment {  
    // Fragment對應的標籤,當Fragment依附於Activity時得到   
    private String tag;  

    @Override  
    public void onAttach(Activity activity) {  
        super.onAttach(activity);  
        tag = getTag();  
    }  

    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  
            Bundle savedInstanceState) {  
        TextView textView = new TextView(getActivity());  
        textView.setText(tag);  
        return textView;  
    }  
}  

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

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