Android 學習筆記四:建立工具欄按鈕
前面我們已經可以在一個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>
注意其中我們用到了 drawable
和 string
中的兩個資源,需要自己去建立一下。
二,在 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
就是宣告覆蓋式工具欄,注意第二行是相容庫的時候用。