顯示廣告
隱藏 ✕
看板 KnucklesNote
作者 Knuckles (站長 那克斯)
標題 [AndroidStudio] Toolbar 使用方法
時間 2016-01-19 Tue. 10:24:11


在建立專案時使用「Empty」產生的初始頁面
上方固定住的那一條叫做 ActionBar

[圖]


在新版的 Android API 會建議改用比較有彈性的 Toolbar
如果初始頁面是選擇「Blank」的話,產生的程式碼就會是使用 Toolbar 了

將 ActionBar 換成 Toolbar

先設定 Style 將 ActionBar 關閉

在 /res/values/styles.xml
將 AppTheme 的 parent 改為 Theme.AppCompat.NoActionBar
像這樣:
    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

在 AndroidManifest.xml
確認 <application> 的屬性 android:theme="@style/AppTheme"

執行看看 ActionBar 是否隱藏了
[圖]



接著確認頁面的類別為繼承 AppCompatActivity,像這樣
public class MainActivity extends AppCompatActivity

build.gradle 要有
    compile 'com.android.support:appcompat-v7:23.1.1'

在頁面佈局檔,例如 activity_main.xml 加上
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
按 Alt+Enter 在最外層的 Layout 加上
xmlns:app="http://schemas.android.com/apk/res-auto"


修改程式檔 MainActivity.java
在成員函式 onCreate() 裡加上
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
如果有詢問要import什麼檔的話,選
import android.support.v7.widget.Toolbar;


執行看看
[圖]



加上右上角的選單按鈕

在 /res 新增一個 resource 目錄
名稱和類型都用預設的 menu 即可
[圖]


在 /res/menu 新增一個 resource 檔
名稱輸入 menu_main
[圖]


內容修改為
<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="com.disp_tech.dispbbs.MainActivity">

    <!-- 有位置的話在上方顯示為圖示-->
    <item
        android:id="@+id/action_refresh"
        android:icon="@drawable/ic_refresh_white_48dp"
        android:title="refresh"
        app:showAsAction="ifRoom"/>

    <!-- 一律顯示在選單裡-->
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="settings"
        app:showAsAction="never" />
</menu>
在toolbar裡放一個重新整理的圖示
在選單裡放一個選項「settings」

加入圖示 ic_refresh_white_48dp 的方法參考這篇
[AndroidStudio] 加入 Google 提供的 Material icons - KnucklesNote板 - Disp BBS

修改程式檔 MainActivity.java
加上兩個成員函式
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
        case R.id.action_refresh: //點了重新整理
            loadData();
            return true;
        case R.id.action_settings: //點了settings
            Log.d("item","click settings");
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

執行看看,右上角會出現重新整理和選項按鈕
[圖]


點重新整理按鈕會重新載入列表

點選項會出現有一個settings按鈕的選單
[圖]

點一下 settings 看 logcat 有沒有出現 click settings 的訊息


動態改變選單內容
參考 http://developer.android.com/intl/zh-tw/guide/topics/ui/menus.html#options-menu

使用 onPrepareOptionsMenu() 可以在打開選單時,設定某些選項要不要顯示
例如有用了個成員變數 mShowSettings 來決定要不要顯示按鈕的話
加上
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        if(mShowSettings) {
            menu.findItem(R.id.action_settings).setVisible(true);
        } else {
            menu.findItem(R.id.action_settings).setVisible(false);
        }
        return super.onPrepareOptionsMenu(menu);
    }

Android 3.0 後要改變選單內容時
例如在 mShowSettings 值改變的時候,要呼叫一下
invalidateOptionsMenu();
讓系統執行 onPrepareOptionsMenu()


在 Fragment 中加上選單內容

在 onCreateView() 裡加上
        setHasOptionsMenu(true);

加上與 Activity 相同的 onCreateOptionsMenu()
與 onOptionsItemSelected()

呼叫更新選單內容的 invalidateOptionsMenu() 要改為
    getActivity().invalidateOptionsMenu();


參考:
http://developer.android.com/intl/zh-tw/training/appbar/setting-up.html
http://developer.android.com/intl/zh-tw/training/appbar/actions.html
http://www.101apps.co.za/index.php/articles/using-toolbars-in-your-apps.html
http://enginebai.logdown.com/posts/280450/android-toolbar-navigation-drawer
http://www.vogella.com/tutorials/AndroidActionBar/article.html


--
※ 作者: Knuckles 時間: 2016-01-19 10:24:11
※ 編輯: Knuckles 時間: 2017-01-06 11:36:36
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 2367 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇