Android 学习笔记四:创建工具栏按钮
原文:http://blog.csdn.net/lihongxun945/article/details/48951199
前面我们已经可以在一个Activity中添加一些按钮之类的组件。由于手机的屏幕很小,所以很多时候我们会需要用到工具栏,通过下拉菜单之类的方式来节省空间。
Android 提供了对工具栏按钮的强大支持。
增加一个工具栏按钮
我们现在给 MainActivity 增加一个搜索按钮。增加一个按钮需要做这三件事
一,在 res/menu/activity_main.xml 中增加一个按钮的配置。在自动生成的项目中已经有了这个文件,并且自动创建了一个设置按钮,我们只要增加一个搜索按钮即可
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
<item android:id="@+id/action_search"
android:icon="@drawable/ic_search_white_24dp"
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>
注意其中我们用到了 drawable 和 string 中的两个资源,需要自己去创建一下。
二,在 MainActivity 中引用配置好的按钮
在 MainActivity 中已经声明了一个 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;
}
三,给按钮绑定事件
这里我们也已经有一个 onOptionsItemSelected 方法了,只需要在其中增加一下事件监听就行了
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
switch (id) {
case R.id.action_search: Toast.makeText(this, "你点击了搜索", Toast.LENGTH_SHORT).show();
case R.id.action_settings: Toast.makeText(this, "你点击了设置", Toast.LENGTH_SHORT).show();
}
return super.onOptionsItemSelected(item);
}
增加返回按钮
很多时候,我们需要给不是 MainActivity 的活动都增加一个返回按钮,以方便用户通过返回按钮能返回到上一个活动。安卓提供了返回按钮的默认支持,我们只需要配置一下即可,并不用写返回的逻辑代码。
只需要两步既可以实现返回按钮的功能。这里我们希望能在 ProfileActivity 中增加一个 返回按钮,点击返回MainActivity 中
一,在 AndroidManifest.xml 中 Activity 的声明中加上父活动的声明:
<activity
android:name=".ProfileActivity"
android:label="@string/title_activity_profile"
android:parentActivityName=".MainActivity">
<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
<intent-filter>
<action android:name="com.lihongxun.Profile" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
注意,如果想支持 4.0 及以下设备需要加上 meta-data 那一行,不然就只需要加上android:parentActivityName=".MainActivity” 即可
二,在 ProfileActivity 中启用返回按钮。在 onCreate 函数中加上一行代码即可:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
然后再运行试试。
三 覆盖式工具栏
默认情况下,顶部的工具栏是占用空间的,他会把内容区挤到下面去。有时候你可能会希望它是覆盖在内容区上的,特别是你希望能动态显示隐藏工具栏的时候。
只需要在 styles.xml 中声明使用覆盖式工具栏即可
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="android:windowActionBarOverlay">true</item>
<!-- Support library compatibility -->
<item name="windowActionBarOverlay">true</item>
</style>
中间的两行 item 就是声明覆盖式工具栏,注意第二行是兼容库的时候用。
Android 学习笔记四:创建工具栏按钮的更多相关文章
- Android学习笔记四十Preference使用
Preference直译为偏好,博友建议翻译为首选项.一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依旧有效,无须用户再一次进行配置或选择.Android提供preferenc ...
- Android学习笔记四:activity的四种启动模式
Activity有四种启动模式:standard,singleTop,singleTask,singleInstance. 1.standard:标准启动模式 默认模式,这个模式下启动的Activit ...
- (转)Qt Model/View 学习笔记 (四)——创建新的Models
创建新的Models 介绍 model/view组件之间功能的分离,允许创建model利用现成的views.这也可以使用标准的功能 图形用户接口组件像QListView,QTableView和QTre ...
- android 学习笔记四:控件
1.android:gravity 指定控件的基本位置,比如居中.居右等位置 Top:顶部 bottom:底部 left:居左 right:居右 center_vertical:垂直居中 center ...
- android学习笔记四
TextView.Button.CheckBox.RadoiButton.EditView.ImageButton.ToogleButton——略 AnalogClock.DigitalClock = ...
- 【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask
目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注 ...
- 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...
- 【转】Pro Android学习笔记(十四):用户界面和控制(2):Text类控制
目录(?)[-] TextView 例子1在XML中设置autoLink属性 例子2在代码中设置autoLink属性 EditText AutoCompleteTextView MultiAutoCo ...
- 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果
目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...
随机推荐
- 04hive查询
详细文档查看:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select 一. 基本查询(SELECT …FROM) ...
- vue项目用npm安装sass包遇到的问题及解决办法
IDEA启动vue程序,浏览器访问时出现如下情况的关于node-sass的错误: 错误1: Module build failed (from ./node_modules/sass-loader/d ...
- Django - 生成models的UML图
参考 https://simpleit.rocks/python/django/generate-uml-class-diagrams-from-django-models/ 运用django-ext ...
- 交换分区swap和日志系统
目录 1.使用系统中的某个文件作为swap分区 1.1创建swapfile 1.2格式化swap分区 1.3检查当前swap分区情况 1.4临时启用新建swap分区并查看情况 1.5 关闭新建的swa ...
- 计算机二级-C语言-程序设计题-190111记录-两种指针赋值的不同,普通输入输出函数和文件输入输出函数的使用
//程序设计题:函数fun的功能是:将两位数的正整数a,b合并形成一个整数放在c中.合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上.例如:当 ...
- Dubbo教程:入门到实战
Dubbox简介 Dubbox 是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo ,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行优化,并继续维护 ...
- eight(待考究)
为什么明明结果都可以到达那种情况,步骤不一样就不给通过 QAQ 有哪位大佬提点一下,在下感激不尽~~~ 我的代码: #include <iostream>#include <queu ...
- 运行时Runtime的API
const char * class_getName(Class cls); 返回类的名称. Class class_getSuperclass(Class cls); 返回类的超类. Class c ...
- Kubernetes的pod控制器及ReplicaSet控制器类型的pod的定义
为什么需要Pod Kubernetes项目之所以这么做的原因: 因为Kubernetes是谷歌公司基于Borg项目做出来的,谷歌工程师发现,他们部署的应用往往存在这进程与进程组的关系.具体说呢,就是这 ...
- ubuntu资料
1.VNC实现Windows远程访问Ubuntu 16.04(无需安装第三方桌面,直接使用自带远程工具) https://www.cnblogs.com/xuliangxing/p/7642650.h ...