Android ActionBar 示例教程

今天我们将探讨Android的操作栏(ActionBar)。操作栏是任何应用程序的重要部分,无论是Web应用还是移动应用。今天我们将学习如何使用ActionBar组件在Android应用程序中实现操作栏。

安卓的操作栏

安卓的ActionBar是安卓活动屏幕顶部横跨的菜单栏。安卓的ActionBar可以包含菜单项,在用户点击“菜单”按钮时可见。一般而言,一个ActionBar由以下四个组件组成:

  • App Icon: App branding logo or icon will be displayed here
  • View Control: A dedicated space to display Application title. Also provides option to switch between views by adding spinner or tabbed navigation
  • Action Buttons: Some important actions of the app can be added here
  • Action Overflow: All unimportant action will be shown as a menu

Android操作栏设置

所有使用Theme.Holo主题或派生于Theme.Holo主题的活动都会自动包含一个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一样工作。以@+id/开头的android:id值将在R.menu常量集合中创建一个常量

 

    1. android:title属性值包含了菜单项的标题

 

    1. android:icon属性引用了drawable目录中的图标

 

    1. android:showAsAction属性指示给定的项在操作栏中应该如何展示。我们可以从以下任一标志中选择:

always:始终将其保留在操作栏中
ifRoom:当有空间时才保留
never:意味着该菜单项不会作为图标放置在操作栏中。它只会在单击菜单按钮时,在弹出的菜单中可见
|withText:我们可以将其附加到always或ifRoom,表示工具栏按钮既是图标又是标题,而不仅仅是图标

请注意,始终(always)并非保证会作为一个工具栏按钮存在 – 如果您要求始终(always)显示100个项目,将无法容纳它们所有。然而,始终(always)项目在操作栏中具有比ifRoom(如果有空间)项目更高的优先级,以便占用空间。

将菜单扩展至Android的操作栏中

为了显示在菜单XML文件中定义的菜单项,您需要加载该菜单文件。我们可以在希望添加ActionBar的活动的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;
}

R.menu.menu_main参数是指向菜单XML文件的常量。菜单参数是我们希望填充菜单项的菜单。

响应Android操作栏事件

为了找出用户何时点击这些东西,我们需要覆盖MainActivity中的onOptionsItemSelected()方法,如下所示:

@Override
public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) {
    case R.id.add:
        //add the function to perform here
        return(true);
    case R.id.reset:
        //add the function to perform here
        return(true);
    case R.id.about:
        //add the function to perform here
        return(true);
    case R.id.exit:
        //add the function to perform here
        return(true);
}
    return(super.onOptionsItemSelected(item));
}

现在让我们给项目中的每个菜单项分配一些基本功能。

项目结构

Android动作栏示例代码

我们已经在MainActivity中按照下面代码片段所示实现了四个菜单项:MainActivity.java

package com.Olivia.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) {
        // 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.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内容,在第三个项目中显示一个toast,在第四个项目中退出应用程序。请注意,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类)。因此在这里没有必要显式地定义它。

安卓操作栏的后移搭建

    1. 自从Android Honeycomb 3.0之后引入了ActionBar,如果minSdkVersion小于或等于11,我们需要导入app-compat-v7 jar到我们的gradle中以实现ActionBar,就像我们在这里所做的一样,以启用向后兼容性。

 

    另一种方法是独立于操作栏补丁,导入并扩展MainActivity与ActionBarSherlock类,因为这个类是在Android 3.0之后引入的。

下图显示了我们项目生成的输出结果。您可以看到ActionBar包含了预定义的图标。当点击添加图标时,TextView更新内容。当点击重置时,TextView将内容恢复到原始状态。当点击关于时,如下所示出现toast通知。这就结束了关于Android ActionBar示例教程的介绍。您还应该阅读有关Android自定义ActionBar的内容。您可以从以下链接下载Android ActionBar项目。

下载Android ActionBar实例项目

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds