您的位置:首页 > 移动开发 > Android开发

Adding Action Buttons --1.1.2

2016-03-01 21:09 375 查看
Action bar 允许你根据上下文向 action items 里面添加按钮。这些按钮通常以图标或者文字的形式出现。那些不适合在直接在 Action bar中显示或者不是很重要的选项通常放在 Action bar 的 overflow(省略视图)里。



1. Specify the Actions in XML

在 Action bar 中的一些按钮和隐藏在 overflow 中的选项通常被定义在 XML 菜单资源文件中。为了向 Action bar 中添加按钮,你需要在工程的 res/menu/ directory 文件夹下创建新的 XML 文件。

<item>
元素中添加任何你想为 Action bar 添加的元素。例如:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:showAsAction="ifRoom" />
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:showAsAction="never" />
</menu>


上面声明了:“查询”按钮通常应该出现在 Action bar 上(如果空间允许),但是“设置”按钮一直都在 Action bar 的 overflow 里(默认情况下,我们为 Action bar 添加的每一个按钮都出现在 overflow 里)。

上面用到的
icon
string
都应该提前存放在相应的资源文件下。

注意:当你在为应用程序添加
icons
或者其他图片资源文件时,你应该多添加几套图片,以备适配

如果你的 Android SDK 是 2.1,
showAsAction
属性的“android”命名空间是不能用在这个版本上的,因此你必须在 XML 文件里声明自己的命名空间(这个命名通常情况下应该是和包名相关的,但是这个没有任何规定,也就是说,你可以创建任何你想要的命名空间,但是这个命名空间只在当前 XML 内有效)。例如:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
yourapp:showAsAction="ifRoom"  />
...
</menu>


2. Add the Actions to the Action Bar

为了给 Action bar 添加 items,你必须实现
onCreateOptionsMenu()
回调函数,并在函数里过滤菜单资源文件,然后将其添加到
Menu
对象。例如:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}


3. Respond to Action Buttons

当用户点击了 Action bar 中的按钮或者任何在 overflow 中的按钮时,系统将会回调
onOptionsItemSelected()
。因此为了监听 Action bar 里按钮的点击事件,你必须实现此函数(onOptionsItemSelected()),并在里面调用
MenuItem
getItemId()
函数,然后匹配你在资源文件中为每一个 item 声明的 id。例如:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_search:
openSearch();
return true;
case R.id.action_settings:
openSettings();
return true;
default:
return super.onOptionsItemSelected(item);
}
}


4. Add Up Button for Low-level Activities

在你的应用程序中,并不是所有的 Activity 都是应用程序的 “main Activity“,因此你必须为这些非”main Activity“提供一个返回主菜单的方法,”Up button“便应运而生了。

当你的应用程序 Android SDK 版本号在 4.1 及以上时,或者你使用的是支持库里的
ActionBarActivity
,你只需要在清单文件里声明当前 Activity 的”父“ Activity,然后在对应的 Activity 里面使 Action bar ”可用“即可。例如:

清单文件声明:

<application ... >
...
<!-- The main/home activity (it has no parent activity) -->
<activity
android:name="com.example.myfirstapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
android:name="com.example.myfirstapp.DisplayMessageActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName="com.example.myfirstapp.MainActivity" >
<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myfirstapp.MainActivity" />
</activity>
</application>


使Action bar 可用:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_displaymessage);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// If your minSdkVersion is 11 or higher, instead use:
// getActionBar().setDisplayHomeAsUpEnabled(true);
}


这样做之后,因为系统已经知道
DisplayMessageActivity
的”父 “ Activity 是谁,因此你不需要为 ”Up button“做任何监听事件。

好了,这篇文章到这里就结束了,希望能帮到小伙伴,have a good day~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息