Android中通过ActionBar为标题栏添加搜索以及分享视窗
在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果。ActionBar的主要目的是:
1.提供一个用于识别应用程序的标示和用户的位置的专用空间。
2.在不同的应用程序之间提供一致的导航和视觉体验。
3.突出Activity的关键操作(如“搜索”、“创建”、“共享”等),并且在可预见的方法内给用户提供快捷的访问。
今天我们就简单梳理一下如何通过ActionBar为标题添加“搜索”和“分享”的操作视窗,如下图:
操作视窗是作为操作项目按钮的替代品显示在操作栏中的一个可视构件。例如,如果你有一个用于搜索的可选菜单项,你可以用Searchview类来替代操作栏上的搜索按钮。
要个菜单资源中的一个项目声明一个操作视窗,你既可以使用android:actionLayout属性也android:actionviewClass属性来分别指定一个布局资源或要使用的可视构件类。
与操作视窗类似,操作提供器(由ActionProvider类定义的)用一个定制的布局代替一个操作项目,它还需要对所有这些项目行为的控制。当你在操作栏中给一个菜单项声明一个操作项目时,它不仅要一个定制的布局来控制这个菜单项的外观,而且当它在显示在溢出菜单中时,还要处理它的默认事件。无论是在操作栏中还是在溢出菜单中,它都能够提供一个子菜单。例如,ActionProvider的扩展类ShareActionProvider,它通过在操作栏中显示一个有效的共享目标列表来方便共享操作。与使用传统的调用ACTION_SEND类型Intent对象的操作项不同,你能够声明一个ShareActionProvider对象来处理一个操作项。这种操作提供器会保留一个带有处理ACTION_SEND的Intent对象的应用程序的下拉列表,使这个菜单项显示在溢出菜单中。因此,当你使用像这样的操作提供器时,你不必处理有关这个菜单项的用户事件。要给一个操作项声明一个操作提供器,就要在菜单资源中对应的<item>元素中定义android:actionProviderClass属性,提供器要使用完整的类名。
第一步:建立menu资源文件
建立menu资源文件,设置搜索和分享的ITEM功能组件。
(1)新建menu文件夹,如图
(2)在menu资源文件夹下建立serch_share_menu.xml文件(自定义名称)
(3)serch_share_menu.xml组件部署代码:
1 <?xml version="1.0" encoding="utf-8"?> 2 <menu xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto"> 4 <item 5 android:id="@+id/search" 6 app:actionViewClass="android.support.v7.widget.SearchView" 7 android:icon="@android:drawable/ic_menu_search" 8 android:orderInCategory="100" 9 android:title="搜索" 10 app:showAsAction="always|collapseActionView" /> 11 <item 12 android:id="@+id/share" 13 android:icon="@android:drawable/ic_menu_share" 14 android:orderInCategory="200" 15 android:title="共享" 16 app:actionProviderClass="android.support.v7.widget.ShareActionProvider" 17 app:showAsAction="ifRoom" /> 18 </menu>
第二步:java中功能实现代码MainActivity.java:
1 import android.content.Intent; 2 import android.support.v4.view.MenuItemCompat; 3 import android.support.v7.app.AppCompatActivity; 4 import android.os.Bundle; 5 import android.support.v7.widget.SearchView; 6 import android.support.v7.widget.ShareActionProvider; 7 import android.view.Gravity; 8 import android.view.Menu; 9 import android.view.MenuItem; 10 import android.widget.Toast; 11 /** 12 * Created by panchengjia on 2016/12/23. 13 */ 14 15 public class MainActivity extends AppCompatActivity { 16 SearchView searchView; 17 @Override 18 protected void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 setContentView(R.layout.activity_main); 21 } 22 @Override 23 public boolean onCreateOptionsMenu(Menu menu) { 24 //使用菜单填充器获取menu下的菜单资源文件 25 getMenuInflater().inflate(R.menu.search_share_menu,menu); 26 //获取搜索的菜单组件 27 MenuItem menuItem = menu.findItem(R.id.search); 28 searchView = (SearchView) MenuItemCompat.getActionView(menuItem); 29 //设置搜索的事件 30 searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 31 @Override 32 public boolean onQueryTextSubmit(String query) { 33 Toast t = Toast.makeText(MainActivity.this, query, Toast.LENGTH_SHORT); 34 t.setGravity(Gravity.TOP,0,0); 35 t.show(); 36 return false; 37 } 38 @Override 39 public boolean onQueryTextChange(String newText) { 40 return false; 41 } 42 }); 43 //获取分享的菜单子组件 44 MenuItem shareItem = menu.findItem(R.id.share); 45 ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem); 46 //通过setShareIntent调用getDefaultIntent()获取所有具有分享功能的App 47 shareActionProvider.setShareIntent(getDefaultIntent()); 48 return super.onCreateOptionsMenu(menu); 49 } 50 //设置可以调用手机内所有可以分享图片的应用 51 private Intent getDefaultIntent() { 52 Intent intent = new Intent(); 53 intent.setAction(Intent.ACTION_SEND); 54 //这里的类型可以按需求设置 55 intent.setType("image/*"); 56 return intent; 57 } 58 }
虽然用actionBar可以实现这些功能,但在各个安卓版本和定制Rom中的效果表现不一,导致严重的碎片化问题,所以Google在2015的IO大会上发布了系列的Material Design风格的控件。其中ToolBar是替代ActionBar的控件。后面我们也会简述ToolBar的简单用法。
转载于:https://www.cnblogs.com/panhouye/p/6216439.html
Android中通过ActionBar为标题栏添加搜索以及分享视窗相关推荐
- 一些在Android中的小设置~~~持续添加
1开机图片: android-logo-mask.png android-logo-shine.png 这两个图片一个在上一个在下 ./out/target/common/obj/JAVA_LIBRA ...
- android修改默认遥控器键值,android 中遥控器键值的添加和修改
前言:TV 上遥控器键值怎么样对应到android的系统中,最近一个客户需要在我们的平台上修改,所以,我顺便做了一下总结,方便以后参考. 请转载的朋友一定加上出处,十分感谢~~ 第一步: init.r ...
- android actionbar 隐藏,Android中隐藏ActionBar的方法
有的时候Activity的顶部我们需要自定义样式,这个时候就需要隐藏ActionBar.两种方式: 1.在配置文件中通过android:theme=""属性隐藏: android: ...
- html目录框中增加搜索引擎,网站如何添加搜索框?百度站内搜索安装技巧
站内搜索基本上是网站的一个标配了,几乎所有的大型网站都有一个站内搜索框供读者搜索使用,方便用户查找到自己需要的内容.(当然个别网站除外,如单页面网站)写这篇文章是碰到一位网友说他做的织梦站搜索框失效了 ...
- android文本自动添加图片格式,Android中多行文本末尾添加图片排版问题的解决方法...
前言 最近在项目中需要在某个多行英文文本末尾增加一个图片,尝试了很多方法,最后用了一个比较Tricky的方法解决了,当然这种方法不一定是最好最优的解决办法,记录一下. 问题 如果直接使用drawabl ...
- Android中多行文本末尾添加图片 图标在文字后面 换行
效果 方式一:自己写文本及背景 val sb1 = SpannableString("好好学习好好学习好好学习好好学习好好学习好好学习好好学习好好学习好好学习好好学习好好学习好好学习好好学习 ...
- Android获取的状态栏高度,Android中获取状态栏高度的两种方法分享
前言 最近在做一个关于FAB的功能的时候需要获取状态栏的高度,在网上查了很多种方法,下面是选出的比较合理的两个方法.主要参考stackoverflow的这篇问答:http://stackoverflo ...
- 安卓beforetextchanged_【已解决】Android中给EditText添加的TextWatcher中的onTextChanged始终被调用(被执行多次)...
[问题] Android中,给一个EditText添加了TextWatcher,其中实现了onTextChanged, 但是出现个问题: 对于EditText,只修改了一次(比如用删除键删除一个字符) ...
- android 颜色资源文件,android中colors.xml颜色设置资源文件的方法
1. 打开res目录下的values文件夹,双击打开colors.xml文件进行编辑 上代码 #008577 #00574B #D81B60 #ff0000 #0000ff 2. 在res目录下的la ...
最新文章
- oracle没什么没有备份,怎么恢复没有备份的Oracle数据库
- Java这个高级特性-泛型,很多人还没用过!
- OpenSUSE 13.1 和 OpenSUSE 12.3 用户如何安装 Cinnamon 2.2 桌面
- 计算机组成原理:I/O的三大特性
- 操作系统 实验3【动态分区存储管理】
- 如何deactivate Material delta download
- html网页如何获取后台数据库的数据(html + ajax + php + mysql)
- 一:ActiveMQ知识整理
- NEC红外协议编码,38K红外遥控编码,红外遥控发射接收电路选型设计
- 获取子元素上面父元素中最大的z-index(z-index在chrome的兼容问题)
- Storm计算结果是怎样存放的
- 安鑫 十年资产翻十倍 普通人是怎么做到的
- uni-app+微信小程序+云开发 爬取必应首页每日图片
- 【打卡】汽车领域多语种迁移学习挑战赛
- SSL 3.0 Poodle漏洞修复方法——转
- 浅谈电池和充电方面的知识
- 使用 SAS 宏变量
- Mac系统升级后,按大小写键没反应了,切换大小写的灯不亮了
- sprintf用法(很强大啊)
- Mysql----关联查询