1. 程式人生 > >android學習筆記:在actionBar中增加控制元件

android學習筆記:在actionBar中增加控制元件

1.在AndroidManifest.xml中新增配置activity屬性

  <activity android:name=".killProcess"
            android:label="殺殺殺"
            android:theme="@style/AppTheme">
  </activity>
2.在menu資料夾下新建一個佈局,並在佈局中增加控制元件
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" tools:context=".killProcess">
    <item android:id="@+id/personalInformation"
        android:title="一般不顯示"
        android:icon="@drawable/cn_icon_person_center_blue"
        android:orderInCategory="100" app:showAsAction="always" /><!--icon可以自選一個圖片,放在res檔案下的drawable目錄下-->
    <item android:id="@+id/dianhua" android:title="一般不顯示"
        android:orderInCategory="100" app:showAsAction="never" /><!--如果是never則會將icon收斂到三個點點點的menu中-->
</menu>
3.然後在activity對應的java檔案中過載onCreateOptionsMenu方法,並選用自己建立的menu檔案,比如此處的“R.menu.kill”

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.kill, menu);
        return super.onCreateOptionsMenu(menu);
    }



這種方式的actionBar是沒有三個點點點的overflow按鈕

,當標題欄上的控制元件過多時,無法自動將控制元件隱藏進overflow按鈕

如果需要使用帶overflow的標題欄,可以通過反射設定顯示overflow按鈕,修改ViewConfiguration類的sHsPermanentMenuKey欄位值

    private void setOverflowShowingAlways() {
        try {
            ViewConfiguration config = ViewConfiguration.get(this);
            Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
            menuKeyField.setAccessible(true);
            menuKeyField.setBoolean(config, false);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
然後在OnCreate方法中呼叫一下剛才的setOverflowShowingAlways()就可以了

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_kill_process);
        setOverflowShowingAlways();

另外,也可以換一個theme

1.在AndroidManifest.xml檔案中將theme改成AppTheme.NoActionBar

<activity android:name=".killProcess"
            android:label="殺殺殺"
            android:theme="@style/AppTheme.NoActionBar">
</activity>
2.在activity的佈局檔案中增加toolBar

   <android.support.design.widget.AppBarLayout android:layout_height="wrap_content"
        android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
            android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

3.在activity對應的java檔案中添加布局檔案中定義的toolBar

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_kill_process);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        

menu檔案和onCreateOptionsMenu和第一種方式保持一致就可以了,執行效果如下: