安卓 ActionBar 示例教程

今天,我们将研究Android ActionBar。动作栏是任何应用程序的重要组成部分之一,无论是Web应用程序还是移动应用程序。今天我们将学习如何使用ActionBar组件在Android应用中实现action bar。

Android Broad Balm

android actionbar,android action barAndroid操作栏是一个菜单栏,位于Android活动屏幕的顶部。Android菜单栏可以包含菜单项,当用户单击菜单按钮时,这些菜单项将变为可见。一般来说,一个工具栏由以下四个部分组成:

  • App Icon :此处会显示App品牌标识或图标
  • 查看控件 :显示应用程序标题的专用空间。还提供了通过添加微调栏或选项卡式导航在视图之间切换的选项
  • 操作按钮 :可以在这里添加APP的一些重要操作
  • 操作溢出 :所有不重要的操作都会显示为菜单

Android贴吧设置

使用主题Theme.Holo 或从** Theme.Holo** 派生的主题的所有活动都将自动包含ActionBar。

Android ActionBar菜单

将工具栏图标和操作溢出项放入操作栏的最简单方法是在 res/menu 文件夹中创建菜单XML资源文件。我们可以在文件夹中的原始xml文件中添加菜单项,如下所示:menu_main.xml

 1<menu xmlns:android="https://schemas.android.com/apk/res/android"
 2    xmlns:app="https://schemas.android.com/apk/res-auto"
 3    xmlns:tools="https://schemas.android.com/tools" tools:context=".MainActivity">
 4
 5    <item
 6        android:id="@+id/add" android:icon="@android:drawable/ic_menu_add" app:showAsAction="always"   android:title="@string/add"/>
 7    <item
 8        android:id="@+id/reset" android:icon="@android:drawable/ic_menu_revert" app:showAsAction="always|withText" android:title="@string/reset"/>
 9    <item
10        android:id="@+id/about" android:icon="@android:drawable/ic_dialog_info" app:showAsAction="never" android:title="@string/about">
11    </item>
12    <item
13        android:id="@+id/exit"  app:showAsAction="never" android:title="@string/exit">
14    </item>
15</menu>

需要为每个菜单项配置四项内容。

1.Android:ID :属性指定菜单项的id。这就像Android应用程序中其他任何地方的ID一样。以@+id/开头的android:id值将在R.Menu常量集合中创建一个常量 2.Android:标题 :属性值包含菜单项的标题 3.Android:ICON :属性引用可放入目录中的图标 4.Android:showAsAction :该属性指示在操作栏中应该如何描绘给定的条目。我们可以从下面提到的任何旗帜中进行选择: -始终 将其始终保留在ActionBar中 -ifRoom 只有在空间可用时才保留它 -从不 这意味着菜单项不会作为图标放置在ActionBar中。仅当在弹出的菜单中单击菜单按钮时才可见 -|with Text :我们可以将它附加到Always或ifRoom,以指示工具栏按钮既是图标又是标题,而不仅仅是图标

请注意,always 并不保证是一个工具栏按钮-如果您要求100个always项目,您将没有空间容纳所有这些项目。但是,always项在操作栏中的空间优先于ifRoom项。

将菜单填充到Android菜单栏中

为了显示菜单XML文件中定义的菜单项,您需要放大菜单文件。我们在要添加ActionBar的活动的onCreateOptionsMenu()方法中执行此操作。以下是代码片段:

1@Override
2public boolean onCreateOptionsMenu(Menu menu) {
3    // Inflate the menu; this adds items to the action bar if it is present.
4    getMenuInflater().inflate(R.menu.menu_main, menu);
5    return true;
6}

R.menU.S.MENU_Main 参数是引用菜单XML文件的常量。Menu参数是我们要将菜单项扩展到的菜单。

响应Android动作栏事件

要找出用户何时点击了这些内容之一,我们需要覆盖MainActivity中的onOptionsItemSelected(),如下所示:

 1@Override
 2public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) {
 3    case R.id.add:
 4        //add the function to perform here
 5        return(true);
 6    case R.id.reset:
 7        //add the function to perform here
 8        return(true);
 9    case R.id.about:
10        //add the function to perform here
11        return(true);
12    case R.id.exit:
13        //add the function to perform here
14        return(true);
15}
16    return(super.onOptionsItemSelected(item));
17}

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

项目结构

Android操作栏示例,Android操作栏项目,Android操作栏

Android条码示例代码

我们在MainActivity中实现了四个菜单项,如下面的代码片段所示:MainActivity.java

 1package com.journaldev.actionbar;
 2
 3import android.os.Bundle;
 4import android.support.v7.app.AppCompatActivity;
 5import android.view.Menu;
 6import android.view.MenuItem;
 7import android.widget.TextView;
 8import android.widget.Toast;
 9
10public class MainActivity extends AppCompatActivity {
11
12    TextView count;
13    @Override
14    protected void onCreate(Bundle savedInstanceState) {
15        super.onCreate(savedInstanceState);
16        setContentView(R.layout.activity_main);
17    }
18
19    @Override
20    public boolean onCreateOptionsMenu(Menu menu) {
21        // Inflate the menu; this adds items to the action bar if it is present.
22        getMenuInflater().inflate(R.menu.menu_main, menu);
23        return true;
24    }
25
26    @Override
27    public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) {
28        case R.id.add:
29            count=(TextView)findViewById(R.id.textView);
30            count.setText("Add is clicked");
31            return(true);
32        case R.id.reset:
33            count=(TextView)findViewById(R.id.textView);
34            count.setText("Nothing is selected");
35            return(true);
36        case R.id.about:
37            Toast.makeText(this, R.string.about_toast, Toast.LENGTH_LONG).show();
38            return(true);
39        case R.id.exit:
40            finish();
41            return(true);
42
43    }
44        return(super.onOptionsItemSelected(item));
45    }
46}

这些项目被分配了各自的功能。所选项目由其在menu_main.xml文件中定义的id确定。这里我们只需更改前两项中的TextView‘内容,在第三项中显示一个[toast](/community/tutorials/android-spinner-drop-down-list),并在第四项中退出应用程序。请注意,**AppCompatActivity** 是对** ActionBarActivity** 的弃用版本的替代。style es.xml`文件定义如下:

1<resources>
2
3    <!-- Base application theme. -->
4    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
5        <!-- Customize your theme here. -->
6    </style>
7
8</resources>

正如您所看到的,父主题使用Theme.AppCompat 的派生元素,默认情况下它持有ActionBar(除非您使用Theme.AppCompat.Light.NoActionBar类)。因此,没有必要在这里明确定义它。

Android动作栏回传

1.由于ActionBar是在Android Honeycomb 3.0之后引入的,要在minSdkVersion为11或更低时实现ActionBar,我们需要将app-Compat-v7 JAR导入到Gradle中,就像我们在这里所做的那样,以实现向后兼容 2.另一种方式是使用ActionBarSherlock 导入和扩展MainActivity,独立于操作栏后端,因为这个类是在Android 3.0之后引入的

下图显示了我们的项目产生的输出,您可以看到ActionBar包括预定义的图标。在单击添加图标后,文本视图将更新内容。文本视图会将内容还原为单击重置后的原始内容。当点击About时,会出现如下所示的吐司通知。安卓操作栏example这结束了安卓操作栏的示例教程。您还应该阅读有关安卓定制ActionBar.您可以通过下面的链接下载Android ActionBar 项目。

下载Android ActionBar示例Project

Published At
Categories with 技术
Tagged with
comments powered by Disqus