1. 程式人生 > >Action Bar 的相關操作

Action Bar 的相關操作

要想將所有Activity 的Action Bar隱藏或者單獨隱藏某個或某幾個Activity中的Action Bar

只需要再AndroidManifest.xml中將對應的theme改成字尾為 NoActionBar, 如

       <activity android:name=".Demo01"
            //更改當前Activity的ActionBar為隱藏狀態
            android:theme="@style/Theme.AppCompat.Light.NoActionBar"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>

但這種方式的缺陷在於, 一旦設定 , 再程式執行時不能更改 , 不能靈活的隱藏和顯示 ,

可以通過 

        //獲取當前ActionBar
        actionBar = getSupportActionBar();

 通過

 actionBar.hide();
 actionBar.show();

 顯示和隱藏ActionBar

public class ActionBarDemo extends AppCompatActivity {

    private boolean ActionBarIsShow = true;
    private ActionBar actionBar;
    private Button actionBarBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_action_bar_demo);
        actionBarBtn = findViewById(R.id.actionBarBtn);
        //獲取當前ActionBar
        actionBar = getSupportActionBar();
    }

    @SuppressLint("SetTextI18n")
    public void showActionBar(View view) {
        if (ActionBarIsShow){
            //隱藏ActionBar
            actionBar.hide();
            actionBarBtn.setText("顯示ActionBar");
            ActionBarIsShow = false;
        }else {
            //顯示ActionBar
            actionBar.show();
            actionBarBtn.setText("隱藏ActionBar");
            ActionBarIsShow = true;
        }
    }
}

新增Action Item

  • 定義選單資原始檔
  • 在onCreateOptionsMenu()方法中載入選單資原始檔

 要在ActionBar上新增圖示, 需要先建立資原始檔, 在res目錄下建立menu目錄

然後建立menu.xml資原始檔

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/search"
        android:icon="@drawable/icon_search"
        android:title="search"
        app:showAsAction="always"
        />
     <!--showAsAction 下的選項 always : 總是顯示在ActionBar上-->
                           <!--ifRoom : 當Action有可用空間時就顯示在ActionBar上-->
                                    <!--沒有足夠空間,就顯示在溢位選單中-->
                           <!--never  : 表示選單項永遠都不顯示在ActionBar上-->
                            <!--withText: 將選單項顯示在ActionBar上,並且顯示文字,-->
                                    <!--受到ActionBar空間的顯示,文字可能顯示不全-->
    <item
        android:id="@+id/home"
        android:icon="@drawable/icon_home"
        android:title="主頁"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/setting"
        android:title="設定"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/about"
        android:title="關於"
        app:showAsAction="never" />
</menu>

然後在Java程式碼中,重寫onCreateOptionsMenu方法


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //例項化一個MenuInflater物件
        MenuInflater inflater = getMenuInflater();
        //解析選單檔案
        inflater.inflate(R.menu.menu,menu);
        return super.onCreateOptionsMenu(menu);
    }

新增Action View

在item裡更改 search的item

        <item
        android:id="@+id/search"
        android:icon="@drawable/icon_search"
        android:title="搜尋"
        app:showAsAction="always"

        app:actionViewClass="android.support.v7.widget.SearchView" />
        <!--新增searchView實現類(android自帶)-->

這樣點選搜尋圖示會自動彈出搜尋框

響應Action按鈕的點選事件, 重寫onOptionsItemSelected方法

通過方法傳入的MenuItem引數呼叫它的getItemId()方法和menu資源中的id進行比較

從而辨別出使用者點選的是哪一個Action按鈕

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.home:
                Toast.makeText(this, "點選了主頁按鈕", Toast.LENGTH_SHORT).show();
            default:
                return super.onOptionsItemSelected(item);

        }
    }

Action Bar實現層級導航, 在子頁面中顯示返回箭頭

新建兩個Acitvity Demo02和NewActivity Demo02作為主頁面

在Demo02 中新增一個Button ,點選Button跳轉到NewActivtiy的頁面

NewActivity的原始碼

public class NewActivity extends AppCompatActivity {

    @SuppressLint("RestrictedApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);
        //判斷父Activity是否為空,不為空設定導航圖示顯示
        if (NavUtils.getParentActivityName(NewActivity.this) != null) {
            //顯示向左的箭頭圖示
            getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
        }
        //需要在AndroidManifest.xml檔案中新增meta標籤
//        <activity android:name=".Demo02.NewActivity"
//        android:label="新頁面">
//        <meta-data
//        android:name="android.support.PARENT_ACTIVITY"
//        android:value=".Demo02.NewActivity" />
//        這個設定父Activity
//        </activity>

    }
}