Android官方开发文档Training系列课程中文版:添加ActionBar之添加Action按钮

简介: 原文地址 : http://android.xsoftlab.net/training/basics/actionbar/adding-buttons.html添加Action按钮ActionBar允许在当前的APP上下文内添加很多重要的功能按钮。

原文地址 : http://android.xsoftlab.net/training/basics/actionbar/adding-buttons.html

添加Action按钮

ActionBar允许在当前的APP上下文内添加很多重要的功能按钮。这样便可以通过图标或者文字作为功能按钮直接展示在ActionBar上。功能按钮如果没有足够空间或无足轻重的按钮都会隐藏在隐藏按钮下。

在XML指定功能

所有的功能按钮包括其它在隐藏按钮下的功能按钮都可以通过XML菜单资源来定义。为了添加功能到ActionBar,需要在res/menu/目录下创建一个新的xml文件。

为每一个需要添加到ActionBar的按钮添加一个< item>标签:

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

这里声明了当ActionBar有可用空间的时候Search功能应该作为一个按钮放在ActionBar上。但是设置按钮会总是出现在下拉列表中(默认情况下,所有的功能都会出现在下拉列表中,这对于每一个功能显示的声明你的设计意图是最好的锻炼)。

icon属性这里要求一个图片的资源ID,这里跟的是@drawable/name,这里的name必须是保存在工程中res/drawable/目录下保存的位图图像名称。比如”@drawable/ic_action_search”就是引用了一个名为ic_action_search.png的图片资源。很相似的,title属性也是使用了一个在XML文件中定义的字符串资源。

Note:当为应用创建图标或者其它的位图图像时,drawable文件夹对于提供不同版本的屏幕密度资源来说是很重要的一点。

如果为了兼容像Android 2.1这种低版本而使用了支持库,showAsAction属性对于命名空间android:是不可用的。如果要使用支持库的话必须要在XML中定义自定义的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>

添加功能按钮到ActionBar上

为了将菜单按钮直接放置到ActionBar上,需要重写实现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进行匹配,去决定是哪个功能按钮按下的。这里的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添加返回按钮

Gmail的返回按钮

Note:Gmail的返回按钮

应用中的所有Activity不都是应用的主入口,所以应该在ActionBar上提供一个返回按钮,以便让用户可以通过点击返回按钮返回到上一个屏幕页面。

当运行在Android 4.1或者更高版本上,又或者是使用了ActionBarActivity的支持库的应用,可以在清单文件中简单的申明ActionBar的返回按钮所要返回的界面:

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

然后通过setDisplayHomeAsUpEnabled()设置返回按钮为可用状态:

@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的父界面为MainActivity,当用户按下了返回按钮,然后系统会适当的导航界面到MainActivity,所以你不需要自己处理返回按钮的点击事件。

关于导航按钮的更多信息,请参见:Providing Up Navigation

目录
相关文章
|
2月前
|
存储 消息中间件 人工智能
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
104 3
|
2月前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
102 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
XML IDE 开发工具
【Android UI】自定义带按钮的标题栏
【Android UI】自定义带按钮的标题栏
155 7
【Android UI】自定义带按钮的标题栏
|
存储 数据库 Android开发
🔥Android Jetpack全解析!拥抱Google官方库,让你的开发之旅更加顺畅无阻!🚀
【7月更文挑战第28天】在Android开发中追求高效稳定的路径?Android Jetpack作为Google官方库集合,是你的理想选择。它包含多个独立又协同工作的库,覆盖UI到安全性等多个领域,旨在减少样板代码,提高开发效率与应用质量。Jetpack核心组件如LiveData、ViewModel、Room等简化了数据绑定、状态保存及数据库操作。引入Jetpack只需在`build.gradle`中添加依赖。例如,使用Room进行数据库操作变得异常简单,从定义实体到实现CRUD操作,一切尽在掌握之中。拥抱Jetpack,提升开发效率,构建高质量应用!
457 4
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
存储 Android开发
安卓app,MediaPlayer播放本地音频 | 按钮控制播放和停止
在Jetpack Compose中,不直接操作原生Android组件如`Button`和`MediaPlayer`,而是使用Compose UI构建器定义界面并结合ViewModel管理音频播放逻辑。以下示例展示如何播放本地音频并用按钮控制播放/停止:创建一个`AudioPlayerViewModel`管理`MediaPlayer`实例和播放状态,然后在Compose UI中使用`Button`根据`isPlaying`状态控制播放。记得在`MainActivity`设置Compose UI,并处理相关依赖和权限。
|
Java 开发工具 Android开发
Android Studio 导出JavaDoc文档
Android Studio 导出JavaDoc文档
490 0
|
存储 测试技术 Android开发
Android官方开发文档Training系列课程中文版:目录
原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻译成英文,供国内的开发者使用,尤其是入门开发者,虽然现在网络上有很多入门课程,但是还是依靠官方文档学习来的靠谱,安卓官方文档是一系列的课程,使每个人可以系统的掌握安卓的知识,相比其它课程来说,它为开发者提供了查缺补漏的功能。
1553 0
|
25天前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
161 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
1月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
224 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡

热门文章

最新文章