今天,我们将研究Android ActionBar。动作栏是任何应用程序的重要组成部分之一,无论是Web应用程序还是移动应用程序。今天我们将学习如何使用ActionBar
组件在Android应用中实现action bar。
Android Broad Balm
Android操作栏是一个菜单栏,位于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条码示例代码
我们在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时,会出现如下所示的吐司通知。这结束了安卓操作栏的示例教程。您还应该阅读有关安卓定制ActionBar.您可以通过下面的链接下载Android ActionBar 项目。