Android ActionBar示例教程

今天我們將研究 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>

每个菜单项都需要配置四个事项。

  1. android:id:属性指定菜单项的id。这像Android应用程序中的任何其他地方一样。以@+id/开头的android:id值将在R.menu常量集合中创建一个常量
  2. android:title:属性值包含菜单项的标题
  3. android:icon:属性引用可绘制目录中的图标
  4. 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內容,在第三個項目中顯示一個提示,在第四個項目中退出應用程序。請注意,AppCompatActivityActionBarActivity的過時版本的替代品。 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動作列後退

  1. 由於ActionBar在Android Honeycomb 3.0之後引入,當minSdkVersion為11或更低時,我們需要將app-compat-v7 jar導入到gradle中,以實現ActionBar,這就像我們在這裡所做的那樣,以實現向後兼容性
  2. 另一種方法是導入並擴展MainActivity,獨立於動作列後退,因為這個類是在Android 3.0之後引入的ActionBarSherlock

下圖顯示了我們的項目產生的輸出,您可以看到ActionBar包含了預定義的圖標。當添加圖標被點擊時,textview更新內容。當重置被點擊時,textview將內容恢復為原始內容。當點擊關於時,如下所示,toast通知出現。 這就是Android操作列示例教程的結束。您還應該閱讀關於android自定義ActionBar的相關內容。您可以從下面的鏈接下載android操作列項目。

下載Android操作列示例項目

Source:
https://www.digitalocean.com/community/tutorials/android-actionbar-example-tutorial