Action Bar 的相關操做

要想將全部Activity 的Action Bar隱藏或者單獨隱藏某個或某幾個Activity中的Action Barjava

只須要再AndroidManifest.xml中將對應的theme改爲後綴爲 NoActionBar, 如android

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

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

能夠經過 ide

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

 經過this

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

 顯示和隱藏ActionBarspa

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目錄code

而後建立menu.xml資源文件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的itemblog

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

    }
}
相關文章
相關標籤/搜索