Android 學習筆記四:建立工具欄按鈕

lihongxun945發表於2015-10-07

前面我們已經可以在一個Activity中新增一些按鈕之類的元件。由於手機的螢幕很小,所以很多時候我們會需要用到工具欄,通過下拉選單之類的方式來節省空間。

Android 提供了對工具欄按鈕的強大支援。

增加一個工具欄按鈕

我們現在給 MainActivity 增加一個搜尋按鈕。增加一個按鈕需要做這三件事

一,在 res/menu/activity_main.xml 中增加一個按鈕的配置。在自動生成的專案中已經有了這個檔案,並且自動建立了一個設定按鈕,我們只要增加一個搜尋按鈕即可

<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=".MainActivity">

    <item android:id="@+id/action_search"
        android:icon="@drawable/ic_search_white_24dp"
        android:title="@string/action_search"
        android:showAsAction="ifRoom" />
    <!-- Settings, should always be in the overflow -->
    <item android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:showAsAction="never" />
</menu>

注意其中我們用到了 drawablestring 中的兩個資源,需要自己去建立一下。

二,在 MainActivity 中引用配置好的按鈕

MainActivity 中已經宣告瞭一個 onCreateOptionsMenu 方法了,其實根本不用改:

@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;
}

三,給按鈕繫結事件

這裡我們也已經有一個 onOptionsItemSelected 方法了,只需要在其中增加一下事件監聽就行了

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    switch (id) {
        case R.id.action_search: Toast.makeText(this, "你點選了搜尋", Toast.LENGTH_SHORT).show();
        case R.id.action_settings: Toast.makeText(this, "你點選了設定", Toast.LENGTH_SHORT).show();
    }

    return super.onOptionsItemSelected(item);
}

增加返回按鈕

很多時候,我們需要給不是 MainActivity 的活動都增加一個返回按鈕,以方便使用者通過返回按鈕能返回到上一個活動。安卓提供了返回按鈕的預設支援,我們只需要配置一下即可,並不用寫返回的邏輯程式碼。

只需要兩步既可以實現返回按鈕的功能。這裡我們希望能在 ProfileActivity 中增加一個 返回按鈕,點選返回 MainActivity

一,在 AndroidManifest.xml 中 Activity 的宣告中加上父活動的宣告:

  <activity
        android:name=".ProfileActivity"
        android:label="@string/title_activity_profile"
        android:parentActivityName=".MainActivity">
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />

        <intent-filter>
            <action android:name="com.lihongxun.Profile" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

注意,如果想支援 4.0 及以下裝置需要加上 meta-data 那一行,不然就只需要加上 android:parentActivityName=".MainActivity” 即可

二,在 ProfileActivity 中啟用返回按鈕。在 onCreate 函式中加上一行程式碼即可:

 getSupportActionBar().setDisplayHomeAsUpEnabled(true);

然後再執行試試。

三 覆蓋式工具欄

預設情況下,頂部的工具欄是佔用空間的,他會把內容區擠到下面去。有時候你可能會希望它是覆蓋在內容區上的,特別是你希望能動態顯示隱藏工具欄的時候。
只需要在 styles.xml 中宣告使用覆蓋式工具欄即可

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:windowActionBarOverlay">true</item>
    <!-- Support library compatibility -->
    <item name="windowActionBarOverlay">true</item>
</style>

中間的兩行 item 就是宣告覆蓋式工具欄,注意第二行是相容庫的時候用。

相關文章