Training--添加动作按钮

本文介绍了如何在Android应用中添加动作按钮至动作栏,并解释了如何定义动作按钮的行为及响应方式。此外还介绍了如何在较低版本的Android系统中使用支持库实现相同的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加动作按钮

 

动作栏允许你将重要的动作选项直接放到上面。这些选项可以以图标加文本或纯文本的形式显示在动作栏里,这些选项称作动作按钮。如果按钮不能全部显示出来,或者不需要直接显示的话,他们会被放在“更多”选项里(也就是下图中的上下3个点的按钮)。

Figure 1. An action bar withan action button for Search and the action overflow, which reveals additionalactions

在XML中指定动作

 

所有的动作按钮包括显示在“更多”选项里的都被定义在菜单资源里。为了在动作栏里添加动作,在你的项目文件夹res/menu/下创建一个XML文件。

 

针对每一个添加到动作栏的动作,相应地在文件中添加一个<item>,如下:

res/menu/main_activity_actions.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <!— 搜索,显示为动作按钮 -->
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          android:showAsAction="ifRoom" />
    <!—设置,显示在“更多”选项里 -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          android:showAsAction="never" />
</menu>

上面声明了当动作栏空间足够的话,就将搜索选项作为动作按钮显示在动作栏上。设置选项显示在“更多”选项里。(默认情况下,所有选项都会显示在“更多”选项里)。

 

icon属性需要指定一个图片资源ID。紧跟在@drawable/后面的名字必须是你工程文件夹res/drawable下的某一个图片的名字。例如,”@drawable/ic_action_search”指向ic_action_search.png。同样的,title使用的字符串应当定义在res/values文件夹下,在之前的课程中我们已经有过类似介绍。

 

注意:当创建图标或者图片的时候,应当注意适配不同的屏幕密度使用不同大小的图片。这个问题会在以后的课程中讲到。

 

如果你的app在较低的安卓2.1以上版本使用了支持库,那么android:命名空间里没有showAsAction属性定义。这个属性定义是由支持库提供的,你必须自己定义一个XML命名空间,然后使用这个空间名作为属性前缀使用。(一个自定义的命名空间应该基于你的APP名字,但是实际上你可以随意起名,它只在此文件中有效。)如下:

res/menu/main_activity_actions.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>

将动作添加至动作栏

 

为了把菜单添加到动作栏,请在你的activity里覆写方法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);
}

响应动作按钮

 

当用户点击任一动作按钮或者“更多”选项里的任一选项时,系统会调用你的activity里的onOptionsItemSelected()方法。在方法里,调用 MenuItem的getItemId(),可以知道哪一个动作或选项被点击了—对比返回的ID值与你在XML中声明的<item>里的android: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);
    }
}

向下层的activity添加向上按钮

 

(个人看法,当你从activity A进入activity B,那么相对A来说,B就是下层的,就是这么简单的概念。)你的app里总存在着一些不是主入口的界面,也就是说,最开始是从主界面一步一步引导进来的,那么应该提供一个返回父界面(也即上层界面,就是从B返回到A)的方式,动作栏通过提供“向上”按钮来帮助你实现。(“向上”按钮就是下图中的< 左箭头)

 

Figure 4. The Up button in Gmail.

 

当运行在安卓4.1(API 16)或者更高的版本上,或者使用支持库里的ActionBarActivity,实现“向上”导航功能需要你做简单的两件事,第一就是在配置文件中声明父activity,第二就是在代码中使动作栏的向上导航功能变为可用。

 

例如,下面就是一个在配置文件中声明父activity的例子:

<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>

为了使APP图标变成一个“向上”按钮,可以调用方法setDisplayHomeAsUpEnabled():

 

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_displaymessage);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // 如果你 minSdkVersion 是 11或者更大, 应写成下面的形式:
    // getActionBar().setDisplayHomeAsUpEnabled(true);
}

因为系统知道MainActivity是DisplayMessageActivity的父Activity。当用户点击“向上”按钮的时候,系统就会导航到父activity界面---你不需要处理这个事件。

 

关于导航的更多细节,请参考 Providing Up Navigation。(将来或许会翻译^_^)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值