Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中Action Bar的使用

Android中Action Bar的使用

編輯:關於Android編程

內容概要

示例演示和基本介紹
啟用Action Bar
在Action Bar上添加按鈕
自定義Action Bar樣式
自動隱藏Action Bar
Action Provider的使用
ActionBarSherlock的使用

示例演示和基本介紹

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

如果使用ActionBar則分為兩種情況
1、Action Bar on devices BEFORE Android 3.0(API 11)
1)、ActionBarSherlock開源庫
2)、ActionBarCompat library from the Android suppZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcnQgbGlicmFyeSB2NzxiciAvPg0KMqGiQWN0aW9uIEJhciBvbiBkZXZpY2VzIEFGVEVSIEFuZHJvaWQgMy4wKEFQSSAxMSk8L3A+DQo8cD7U2mFuZHJvaWQzLjDWrsew0qrKudPDQWN0aW9uIEJhctPQyOfJz8G91ta3vcq9o6y12tK71tbKudPDQWN0aW9uQmFyU2hlcmxvY2u/qtS0v+KjqDxlbT7Kx2FuZHJvaWS85sjdv6q3orD8tcTSu7j2wKnVuTwvZW0+o6m1scq508O4w7+q1LS/4srHyOe5+9Om08OzzNDy1MvQ0NTaQW5kcm9pZDMuMNLUyc+1xMnosbjU8sSsyM/KudPD1K3J+rXEQWN0aW9uIEJhcrfx1PLKudPDuMO/qtS0v+LM4bmptcRBY3Rpb24gQmFyoaO12rb+1ta3vcq9vs3Kx8q508Nnb29nbGW52be9zOG5qbXEc3VwcG9ydCB2N9XiuPa/qtS0v+KhozxiciAvPg0K1NphbmRyb2lkMy4w1q6687XEyeixuMnPv8nS1Mq508PUrcn6tcRBY3Rpb24gQmFyPC9wPg0KPGgyIGlkPQ=="啟用action-bar">啟用Action Bar

1、Action Bar on devices AFTER Android 3.0(API 11)
從Android 3.0開始Action bar被包含在了所使用所使用了Theme.Holo這個主題的Activity中(或Theme.Holo的子類)Theme.Holo是默認的主題,當minSdkVersion和targetSdkVersion都在11或以上時。
2、Action Bar on devices BEFORE Android 3.0(API 11)
必須是2.1以上的設備,需要在應用中包含Support Library(android-support-v7-appcompat)操作步驟:
1)、將該android-sdk-windows\extras\android\support\v7\appcompat庫導入並拷貝到工作空間中最後引入到你的項目中
2)、將activity繼承自ActivityBarActivity
3)、將AndroidManifest.xml文件中的主題更改為
android:theme=”@style/Theme.AppCompat.Light.DarkActionBar”

在Action Bar上添加按鈕

1、For Android 3.0 and higher only
添加按鈕也分為兩個部分,第一個部分在xml指定這些按鈕(在menu中加入不同的item項

屬性介紹
1)、android:showAsAction=“always“
一直顯示在Action Bar上
2)、android:showAsAction=“ifRoom“
如果Action Bar空間足夠,則顯示
3)、android:showAsAction=“never“
不顯示在Action Bar中,折疊在OverFlow裡
4)、android:showAsAction=“withText“
菜單項和它的圖標,菜單文本一起顯示

2、For Android 2.1 and higher
1)、在menu.xml中加入自定義命名空間
xmlns:yourapp=”http://schemas.android.com/apk/res-auto”

2)、在showAsAction屬性前指定命名空間
    yourapp:showAsAction="ifRoom"

Action Bar上的按鈕添加點擊事件

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    // 給按鈕添加點擊事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
        case R.id.action_search:
            Toast.makeText(this, "Action_Search", 0).show();
            break;
        case R.id.action_settings:
            Toast.makeText(this, "Action_Settings", 0).show();
            break;
        }

        return super.onOptionsItemSelected(item);
    }

給ActionBar左上角圖標添加向上返回按鈕(查看google的官方文檔)具體添加什麼樣的按鈕根據需要設定。

//啟用左上角的向上按鈕        
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//getActionBar().setDisplayHomeAsUpEnabled(true);//3.0以上


              
       
       
            
            
       

注:parentActivityName屬性為3.0以上使用,3.0以下要用“meta-data”

自定義Action Bar樣式

使用android提供好的主題

Theme.Holo for “dark” theme Theme.Holo.Light for a “light” theme

For example




以上是在3.0以上使用Android自帶的主題,如果是android 2.1以上的設備使用如下方式:

For example




Customize the Background(自定義Action Bar的背景顏色)
For Android 3.0 and higher only
1、在themes.xml中新建自定義Style,使其繼承已有的Action Bar Style(如:Theme.Holo)
2、覆寫其actionBarStyle屬性
3、actionBarStyle屬性值指向另一個已被覆寫了background屬性的Style
4、指定該background的屬性值

themes.xml



在AndroidManifest.xml中引用自定義主題

android:theme="@style/CustomActionBarTheme"

For Android 2.1 and higher

themes.xml



最後同樣在清單文件中引入自定義主題

Customize the Color 參考官方文檔

Customize the Tab Indicator

ActionBar actionBar = getActionBar(); // for < 3.0   getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);//設置導航方式,ActionBar.NAVIGATION_MODE_LIST

        ActionBar.TabListener tabLiatener = new ActionBar.TabListener() {

            @Override
            // 未選中時
            public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub

            }

            @Override
            // 選中時
            public void onTabSelected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub
                Toast.makeText(MainActivity.this,
                        "TabSelected" + tab.getPosition(), 0).show();
            }

            @Override
            // 重復選中時
            public void onTabReselected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub

            }
        };

        //添加三個標簽
        for (int i = 0; i < 3; i++) {
            Tab tab = actionBar.newTab();
            tab.setText("Tab" + i);
            tab.setTabListener(tabLiatener);
            actionBar.addTab(tab);//添加到actionbar中
        }

這裡寫圖片描述

自定義Tab標簽的樣式(參照官方文檔)另外還有一種方法可以一鍵生成Action Bar Tab的樣式,設置好後直接下載並解壓將res目錄中的文件全部拷貝到項目中,最後在清單文件中使用一鍵工程生成的樣式。(可以到谷歌的官方文檔學習更多自定義樣式的使用)

自動隱藏Action Bar(Overlaying the Action Bar)

默認情況下,Action Bar出現在當前的activity的頂部,減少了Activity布局當中剩下的可以用的空間,在這種情況下可以調用hide() and show()方法來使Action Bar隱藏或顯示,但是通過這種方式的話會使你的Activity根據新的大小從新計算並且重新繪制這個layout,為了避免重繪現象你可以開啟action bar 的overlay mode模式,當處於overlay模式下activity可以使用剩下可利用的空間並且見這個Action bar繪制到當前layout的前面而不是上面提到的頂部,利用該方式當action bar隱藏或顯示就不會從前計算layout的大小

Enable Overlay Mode(開啟overlay模式)
需要創建自定義主題,這個主題要擴展一個已經存在的Action bar主題並且設置android:windowActionBarOverly屬性為true,(這裡同樣分為兩部分3.0以上的設備和2.1以上設備)
1、For Android 3.0 and higher only

2、For Android 2.1 and higher

Specify Layout Top-margin(指定布局的margintop)

為什麼要知道marginTop,當Action Bar處於overlay模式
時他占據了一些可見的布局,為了確保這些布局保留在Action bar的下部就可以為其加入marginTop或paddingTop屬性並且屬性的值指定為 actionBarSize

For example

1、For Android 3.0 and higher only


    ...

2、For Android 2.1 and higher


    ...

Action Provider的使用

這裡寫圖片描述

知識點(XML)

1、For Android 3.0 and higher only

2、For Android 2.1 and highers

3.0 For example

知識點(JAVA)

1、For Android 3.0 and higher only

     shareItem = menu.findItem(R.id.action_share);
     shareItem.getActionProvider();

2、For Android 2.1 and higher

     shareItem = menu.findItem(R.id.action_share);
     MenuItemCompat.getActionProvider(shareItem);

ActionBarSherlock的使用

ActionBarSherlock 是兼容開發包的一個擴展
開源庫地址
https://github.com/JakeWharton/ActionBarSherlock
官網地址
http://actionbarsherlock.com/

把他下載下來,把actionabarabsherlock拷貝到工作空間中並引入到項目中
導入之後可能會出現的問題:
android-support-v4.jar包版本不一致導致出錯等…

知識點
1、 android:Theme.Holo —-> Theme.Sherlock
android:Theme.Holo.Light —–> Theme.Sherlock.Light
android:Theme.Holo.Light.DarkActionBar —-> Theme.Sherlock.Light.DarkActionBar
…….
2、 Activity —-> SherlockActivity
ListActivity —-> SherlockListActivity
Fragment —-> SherlockFragment
…….
3、 getActivity() —-> getSherlockActivity()
getActionBar() —-> getSupportActionBar();
…….

示例代碼

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.OnNavigationListener;
import com.actionbarsherlock.app.SherlockActivity;


public class MainActivity extends SherlockActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActionBar actinBar = getSupportActionBar();
        actinBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);//設置為列表項的導航模式
        //為列表項添加內容
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1);
        for(int i=0;i<5;i++){
            adapter.add("列表項"+i);
        }

        actinBar.setListNavigationCallbacks(adapter, new OnNavigationListener() {

            @Override
            public boolean onNavigationItemSelected(int itemPosition, long itemId) {

                Toast.makeText(MainActivity.this, "select"+itemPosition, 0).show();
                return false;
            }
        });

    }

}
 android:theme="@style/Theme.Sherlock.Light.DarkActionBar" 

關於ActionBarSherlock的更多設置請查看官網

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved