2019/10/14

Android App學習筆記(二) 在Empty Activity中新增ToolBar

我新增了一個Empty Activity(名稱就叫DBlist), 我想增加Toolbar, 該如何操作呢?

--------------------------------------
首先, 我在這個 Activity的Layout上(檔名假設為: activity_dblist.xml)加入了ToolBar, 如下:
<com.google.android.material.appbar.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/dbListToolbar"
       android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:contentInsetStart="1dp" 
       app:popupTheme="@style/AppTheme.PopupOverlay" />
</com.google.android.material.appbar.AppBarLayout>

同時在onCreate()中要增加這兩行, 才會出現新增的Toolbar
Toolbar toolbar = findViewById(R.id.dbListToolbar);
setSupportActionBar(toolbar);
--------------------------------------
但是這樣會出現兩個Toolbar(可能一個叫ToolBar, 一個叫APPbar?), 所以必需在 AndroidManifest.xml中修改這個Activity的屬性, 增加 android:theme="@style/AppTheme.NoActionBar" , 如下:
<activity    android:name=".DBList"    android:theme="@style/AppTheme.NoActionBar" />

--------------------------------------
接著,  我想要在ToolBar 上增加返回的箭頭, 就必需在onCreate()中再增加這兩行
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);

可是我按下返回箭號, 卻沒有任何反應, 原來我必需要在onOptionsItemSelected(MenuItem item)中再加入
if  (item.getItemId()==android.R.id.home) return;
--------------------------------------
然後, 我想修改Toolbar 的Title ,不想出現app名稱, 例如想改為"資料庫", 則在 onCreate() 中要增加這一行
getSupportActionBar().setTitle("資料");
--------------------------------------
再來, 我還想增加一些menu 選項, 那麼我還要做以下的幾件事
1. 在menu中新增一個xml (例如叫: menu_dblist.xml)
2. 覆寫onCreateOptionsMenu(), 讓optionMenu出現在Toolbar上
@Overridepublic boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_dblist, menu);
    return true;
}
--------------------------------------

說了那麼多, 總結一下全部的步驟:
1. 修改AndroidManifest.xml :  
   在該activity (名稱假設為: DBList) 增加一個theme屬性, 指定為 "@style/AppTheme.NoActionBar" 

   <activity    android:name=".DBList"    android:theme="@style/AppTheme.NoActionBar" />

2.在這個 Activity的Layout上加入了ToolBar元件(id假設為dbListToolbar):
<com.google.android.material.appbar.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/dbListToolbar"
       android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:contentInsetStart="1dp" 
       app:popupTheme="@style/AppTheme.PopupOverlay" />
</com.google.android.material.appbar.AppBarLayout>
3.在這個Activity的onCreate()中增加以下程式:
Toolbar toolbar = findViewById(R.id.dbListToolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setTitle("資料");

4.在這個Activity的onOptionsItemSelected(MenuItem item)中再加入
if  (item.getItemId()==android.R.id.home) return;
--------------------------------------



沒有留言:

精選

小百岳35天完登計劃

台灣小百岳大多屬於容易親近的郊山,可一日往返,適合親子同遊,以下就個人完登的經驗整理一份35天完百規劃(來回步行大約400公里、費時200小時),提供給有意完百的山友參考,這是我們這對菜鳥肉腳夫妻的實測記錄,大多數人可以在更快的時間內完成。山林的奧勝美妙值得我們慢步欣賞、駐足享...