今天我們將研究 Android ActionBar。Action Bar 是任何應用程式的重要部分,無論是 Web 應用程式還是移動應用程式。今天我們將學習如何在 Android 應用程式中使用 ActionBar
元件來實現動作列。
Android ActionBar
Android ActionBar 是在 Android 活動畫面頂部運行的菜單列。Android ActionBar 可以包含菜單項目,當用戶點擊“菜單”按鈕時變得可見。一般而言,
ActionBar
包括以下四個組件:
- 應用程式圖示:應用程式品牌標誌或圖示將顯示在此處
- 視圖控制:用於顯示應用程式標題的專用空間。還提供了通過添加下拉列表或選項卡導航來在視圖之間切換的選項
- 動作按鈕:可以在此處添加應用程式的一些重要操作
- 動作溢出:所有不重要的操作將顯示為菜單
Android ActionBar 設置
所有使用主题Theme.Holo或派生自Theme.Holo的活动将自动包含一个ActionBar。
Android ActionBar菜单
将工具栏图标和操作溢出项添加到操作栏的最简单方法是创建位于res/menu文件夹中的菜单XML资源文件。我们可以在文件夹中的原始xml文件中添加菜单项,如下所示:menu_main.xml
<menu xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools" tools:context=".MainActivity">
<item
android:id="@+id/add" android:icon="@android:drawable/ic_menu_add" app:showAsAction="always" android:title="@string/add"/>
<item
android:id="@+id/reset" android:icon="@android:drawable/ic_menu_revert" app:showAsAction="always|withText" android:title="@string/reset"/>
<item
android:id="@+id/about" android:icon="@android:drawable/ic_dialog_info" app:showAsAction="never" android:title="@string/about">
</item>
<item
android:id="@+id/exit" app:showAsAction="never" android:title="@string/exit">
</item>
</menu>
每个菜单项都需要配置四个事项。
- android:id:属性指定菜单项的id。这像Android应用程序中的任何其他地方一样。以@+id/开头的android:id值将在R.menu常量集合中创建一个常量
- android:title:属性值包含菜单项的标题
- android:icon:属性引用可绘制目录中的图标
- android:showAsAction:此屬性表示應如何在操作欄中呈現給定的項目。我們可以從以下提到的任何標誌中進行選擇:
- always 保持其始終顯示在操作欄中
- ifRoom 只在有空間時保持
- never 意味著菜單項目不會作為圖標放置在操作欄中。僅在單擊菜單按鈕時,在彈出的菜單中才可見
- |withText :我們可以將其附加到 always 或 ifRoom 中,表示工具欄按鈕既是圖標又是標題,而不僅僅是圖標
請注意,always 並不保證是工具欄按鈕 – 如果您要求 100 個 always 項目,您將無法容納所有這些。然而,always
項目在操作欄中獲得了比 ifRoom
項目更高的空間優先權。
將菜單膨脹到 Android ActionBar 中
為了顯示在菜單 XML 檔案中定義的菜單項目,您需要膨脹菜單檔案。我們在希望添加 ActionBar 的活動的 onCreateOptionsMenu()
方法內這樣做。這是代碼片段:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// 膨脹菜單;如果存在,則將項目添加到操作欄中。
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
R.menu.menu_main 參數是指菜單 XML 檔案的常數。menu 參數是我們要將菜單項目膨脹到其中的菜單。
響應 Android 操作欄事件
為了找出用戶何時點擊其中一個項目,我們需要覆蓋 MainActivity 中的 onOptionsItemSelected()
,如下所示:
@Override
public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) {
case R.id.add:
// 在此處添加要執行的功能
return(true);
case R.id.reset:
// 在此處添加要執行的功能
return(true);
case R.id.about:
// 在此處添加要執行的功能
return(true);
case R.id.exit:
// 在此處添加要執行的功能
return(true);
}
return(super.onOptionsItemSelected(item));
}
現在讓我們為我們項目中的每個菜單項目分配一些基本功能。
項目結構
Android ActionBar示例代碼
我們在MainActivity中實現了下面片段中所示的四個菜單項:MainActivity.java
package com.journaldev.actionbar;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
TextView count;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// 充氣菜單; 如果存在,則將項目添加到操作欄中。
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) {
case R.id.add:
count=(TextView)findViewById(R.id.textView);
count.setText("Add is clicked");
return(true);
case R.id.reset:
count=(TextView)findViewById(R.id.textView);
count.setText("Nothing is selected");
return(true);
case R.id.about:
Toast.makeText(this, R.string.about_toast, Toast.LENGTH_LONG).show();
return(true);
case R.id.exit:
finish();
return(true);
}
return(super.onOptionsItemSelected(item));
}
}
將項目分配其各自的功能。所選項目是根據其在menu_main.xml
文件中定義的ID確定的。在這裡,我們只是更改前兩個項目中的TextView
內容,在第三個項目中顯示一個提示,在第四個項目中退出應用程序。請注意,AppCompatActivity是ActionBarActivity的過時版本的替代品。 styles.xml
文件定義如下:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
</resources>
正如您所見,父主題使用Theme.AppCompat的衍生版本,該版本默認情況下包含ActionBar(除非您使用Theme.AppCompat.Light.NoActionBar類)。因此,在這裡不需要明確定義它。
Android動作列後退
- 由於ActionBar在Android Honeycomb 3.0之後引入,當minSdkVersion為11或更低時,我們需要將app-compat-v7 jar導入到gradle中,以實現ActionBar,這就像我們在這裡所做的那樣,以實現向後兼容性
- 另一種方法是導入並擴展MainActivity,獨立於動作列後退,因為這個類是在Android 3.0之後引入的ActionBarSherlock
下圖顯示了我們的項目產生的輸出,您可以看到ActionBar包含了預定義的圖標。當添加圖標被點擊時,textview更新內容。當重置被點擊時,textview將內容恢復為原始內容。當點擊關於時,如下所示,toast通知出現。 這就是Android操作列示例教程的結束。您還應該閱讀關於android自定義ActionBar的相關內容。您可以從下面的鏈接下載android操作列項目。
Source:
https://www.digitalocean.com/community/tutorials/android-actionbar-example-tutorial