今天,我们将研究Android ActionBar。无论是Web应用程序还是移动应用程序,Action Bar都是任何应用程序的重要组成部分之一。今天,我们将学习如何使用ActionBar组件在android应用中实现操作列。
ActionBar
Android ActionBar是一个菜单列,它贯穿android中的活动屏幕顶部。Android ActionBar可以包含菜单项,这些菜单项在用户单击"菜单"按钮时变为可见。
通常," ActionBar"包含以下四个组件:
使用主题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"
"@+id/reset"
"@android:drawable/ic_menu_revert"
"always|withText"
"@string/reset"
"@+id/about"
"@android:drawable/ic_dialog_info"
"never"
"@string/about"
<
/item
"@+id/exit"
"@string/exit"
/menu
每个菜单项都需要配置四件事。
请注意,始终不能保证始终将其作为工具列按钮-如果您要求提供100个始终项,则将没有空间容纳所有这些项目。但是,"总是"项在操作列中的空间优先于" ifRoom"项。
为了显示菜单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文件的常数。menu参数是我们要其中添加菜单项的菜单。
要找出用户何时点击其中一项内容,我们需要从MainActivity中覆盖" onOptionsItemSelected()",如下所示:
public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) {
case
R.
.add:
//add
the
function
to perform here
(
);
.reset:
.about:
.
exit
:
(super.onOptionsItemSelected(item));
现在,我们为项目中的每个菜单项分配一些基本功能。
我们已经在MainActivity中实现了四个菜单项,如下面的代码片段所示:
MainActivity.java
package com.igiftidea.actionbar;
import
android.os.Bundle;
android.support.v7.app.AppCompatActivity;
android.view.Menu;
android.view.MenuItem;
android.widget.TextView;
android.widget.Toast;
public class MainActivity extends AppCompatActivity {
TextView count;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
count=(TextView)findViewById(R.
.textView);
count.setText(
"Add is clicked"
"Nothing is selected"
Toast.makeText(this, R.string.about_toast, Toast.LENGTH_LONG).show();
finish();
为项目分配了各自的功能。所选项目由在" menu_main.xml"文件中定义的ID决定。
其中我们只更改前两个项目中的" TextView"内容,在第三个项目中显示祝酒词,并在第四个项目中退出应用程序。
请注意,AppCompatActivity替代了不推荐使用的ActionBarActivity版本。
styles.xml文件定义如下:
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类)。因此,无需在此处明确定义它。
下图显示了我们的项目产生的输出,您可以看到ActionBar包含预定义的图标。自从单击添加图标以来,textview会更新内容。自单击重置后,文本视图会将内容还原为原始内容。单击"关于"时,将显示toast通知。
原文链接:https://codingdict.com/