- 浏览: 672005 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yigeisme:
你好,不已.html和.jsp和.jpg结尾的正则表达式怎么写 ...
深入入门正则表达式(java) - 2 - 基本实例 -
su1216:
多谢指正yigeisme 写道1-12(小时,月份)正则:^( ...
深入入门正则表达式(java) - 2 - 基本实例 -
yigeisme:
1-12(小时,月份)正则:^(1[012]|\d)$应该改成 ...
深入入门正则表达式(java) - 2 - 基本实例 -
heikefangxianceshi:
小三将军 写道楼主,我想问下你给的Real.tar.gz是什么 ...
android手机root后的安全问题 (一) -
heikefangxianceshi:
这个程序运行的前提是手机root,但你的手机怎么root的呢? ...
android手机root后的安全问题 (一)
android ActionBar与Menu - 1 - api demos 学习
android ActionBar与Menu - 2 - email中ActionBar分析
android2.x到现在的4.0有很大的差别,而手机开发者又没有经历过3.x版本的过渡,所以对于手机开发者的压力是比较大的,需要学习和适应大量新的组件与api
本文主要总结对ActionBar和Menu的学习
注意:这里以4.0为base
作为开发者,应该阅读下面重要新闻
先说几句题外话
我个人觉得,应该保留实体menu按键,如果没有实体按键,那应该如何与menu交互?android提供了方案,使用action bar,action bar是显示在屏幕上的
等等,似乎有点问题,这也就是说:如果开发者需要menu,那么就需要消耗一部分屏幕的空间,虽然现在的手机很少有3寸以下的屏幕了,但是也没大到增加一个action bar而不使用户与开发者心疼的地步,起码我是这么觉得的
之前我可以隐藏状态栏标题栏但是保留menu,以后估计不行了
开始学习,以api demos - App - Action Bar中内容为主
menu的显示方式
boolean android.app.Activity.onCreateOptionsMenu(Menu menu)还是保留下来了的
MenuItem actionItem = menu.add("Action Button"); actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
setShowAsAction:设置ActionBar中menu的显示方式
显示方式一共有如下5种:
从不显示;如果有空间就显示;总是显示;显示时跟随文字;默认收缩其action view
/** Never show this item as a button in an Action Bar. */ public static final int SHOW_AS_ACTION_NEVER = 0; /** Show this item as a button in an Action Bar if the system decides there is room for it. */ public static final int SHOW_AS_ACTION_IF_ROOM = 1; /** * Always show this item as a button in an Action Bar. * Use sparingly! If too many items are set to always show in the Action Bar it can * crowd the Action Bar and degrade the user experience on devices with smaller screens. * A good rule of thumb is to have no more than 2 items set to always show at a time. */ public static final int SHOW_AS_ACTION_ALWAYS = 2; /** * When this item is in the action bar, always show it with a text label even if * it also has an icon specified. */ public static final int SHOW_AS_ACTION_WITH_TEXT = 4; /** * This item's action view collapses to a normal menu item. * When expanded, the action view temporarily takes over * a larger segment of its container. */ public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8;
其中SHOW_AS_ACTION_WITH_TEXT需要注意一下
在手机中,竖屏状态下text是不会显示的,切换到横屏才会显示text
SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW也需要特别说明一下
menu的每个item都可以设置action view,如果设置了,那么这个view默认是显示的,设置了SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW后,则默认不显示
另外需要说明的是:
现在手机有两种,一种是有实体按键的手机,不在action bar显示的item,按menu则会看到剩余的item
另一种是没有实体menu键的手机,他们通过action bar等触发menu,所有的item都会在action bar显示,“显示不下”的item会在action bar最后一个item触发显示剩余item列表,类似于之前我们按menu键后出现的“more”
(模拟器中可以选择是否有实体menu按键,编辑模拟器 - hardware - new - hardware back/home keys,添加此项选择no即可去掉实体按键)
ActionBar还提供了Tab功能
4.0中大家发现:TabActivity已经称为了过时的class,那么新的标签页如何实现,ActionBar提供一种简单的方式
final ActionBar bar = getActionBar(); final int tabCount = bar.getTabCount(); final String text = "Tab " + tabCount; bar.addTab(bar.newTab() .setText(text) .setTabListener(new TabListener(new TabContentFragment(text))));
其中TabListener要实现ActionBar.TabListener,并实现如下几个函数
private class TabListener implements ActionBar.TabListener { public void onTabSelected(Tab tab, FragmentTransaction ft) {} public void onTabUnselected(Tab tab, FragmentTransaction ft) {} public void onTabReselected(Tab tab, FragmentTransaction ft) {} }
函数从名称就能看出是做什么的了,不再赘述
上面是ApiDemos的示例,只需addTab即可
void android.app.ActionBar.addTab(Tab tab) void android.app.ActionBar.addTab(Tab tab, boolean setSelected) void android.app.ActionBar.addTab(Tab tab, int position) void android.app.ActionBar.addTab(Tab tab, int position, boolean setSelected
除此之外,android也提供了remove和removeAll的api,不再列举
api demos中给出了Action Bar中使用menu的简单演示,效果如下
上面三个menu,下面两个,点击Sort之后弹出二级菜单
只需在xml中进行配置即可
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_search" android:icon="@android:drawable/ic_menu_search" android:title="@string/action_bar_search" android:showAsAction="ifRoom" android:actionViewClass="android.widget.SearchView" /> <item android:id="@+id/action_add" android:icon="@android:drawable/ic_menu_add" android:title="@string/action_bar_add" /> <item android:id="@+id/action_edit" android:icon="@android:drawable/ic_menu_edit" android:showAsAction="always" android:title="@string/action_bar_edit" /> <item android:id="@+id/action_share" android:icon="@android:drawable/ic_menu_share" android:title="@string/action_bar_share" android:showAsAction="ifRoom" /> <item android:id="@+id/action_sort" android:icon="@android:drawable/ic_menu_sort_by_size" android:title="@string/action_bar_sort" android:showAsAction="ifRoom"> <menu> <item android:id="@+id/action_sort_size" android:icon="@android:drawable/ic_menu_sort_by_size" android:title="@string/action_bar_sort_size" android:onClick="onSort" /> <item android:id="@+id/action_sort_alpha" android:icon="@android:drawable/ic_menu_sort_alphabetically" android:title="@string/action_bar_sort_alpha" android:onClick="onSort" /> </menu> </item> </menu>
当把手机变成横屏的时候,由于空间充足,Sort就会显示在Action Bar中,下图是点击Sort后的效果
我们点击By size和Alphabetically会发现,Sort的图标会跟着改变
public void onSort(MenuItem item) { mSortMode = item.getItemId(); // Request a call to onPrepareOptionsMenu so we can change the sort icon invalidateOptionsMenu(); }
invalidateOptionsMenu会通知系统menu发生了改变,触发onPrepareOptionsMenu和onCreateOptionsMenu,然后再看看onPrepareOptionsMenu做了些什么
public boolean onPrepareOptionsMenu(Menu menu) { if (mSortMode != -1) { Drawable icon = menu.findItem(mSortMode).getIcon(); menu.findItem(R.id.action_sort).setIcon(icon); } return super.onPrepareOptionsMenu(menu); }
调用的时候会判断状态,根据状态设置Sort图标
当我们点击Search按钮的时候,它的Action View会显示出来
<item android:id="@+id/action_search" android:icon="@android:drawable/ic_menu_search" android:title="@string/action_bar_search" android:showAsAction="ifRoom" android:actionViewClass="android.widget.SearchView" />
xml中显示了Action View调用的是android.widget.SearchView这个class
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actions, menu); SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.setOnQueryTextListener(this); return true; }
在这里为SearchView设置监听,onQueryTextChange在输入框文字修改时触发,onQueryTextSubmit在提交搜索时触发
在xml也可以设置ActionProvider,例如
<item android:id="@+id/menu_item_action_provider_action_bar" android:showAsAction="ifRoom" android:title="@string/action_bar_settings" android:actionProviderClass="com.example.android.apis.app.ActionBarSettingsActionProviderActivity$SettingsActionProvider"/>
ActionProvider的使用暂时不做过多讨论
上面的图片是一个Action Bar,可以分为几个部分,他们都可以设置为显示或者不显示,从左至右依次为:
ActionBar.DISPLAY_HOME_AS_UP:类似于提示作用,上图为一个脱字符(Up caret),不能单独只显示这个。。
ActionBar.DISPLAY_SHOW_HOME:大大的android图片为home,当然这个默认为apk的图标,可以通过ActionBar.DISPLAY_USE_LOGO来设置使用什么图片
ActionBar.DISPLAY_SHOW_TITLE:接下来的是title
ActionBar.DISPLAY_SHOW_CUSTOM:然后是定制的View,可以通过void android.app.ActionBar.setCustomView(View view, LayoutParams layoutParams)设置
api demos中关于Action Bar的内容总结完了,我想掌握了这些,基本使用应该是没有问题了,之后打算在android源码中找些实例分析一下,待续
转贴请保留以下链接
本人blog地址
评论
不管怎样,你总得有个地方触发hide和show
以前适用menu键,而且不占用屏幕,还不需要额外的代码。现在就显得很不方便了
发表评论
-
android 第三方app截图
2017-08-17 15:18 1169将View生成相应的图片 ... -
android截图事件监听
2017-07-20 18:37 2007android系统没有对用户截屏行为提供回调的api,所以我 ... -
android widget(桌面小部件)实现
2017-06-30 13:02 2060本文介绍如何自己实现一个widget以及各种注意事项。 ... -
acra简析
2016-07-31 23:54 0版本4.9.1 acra是用来在 ... -
android版本差异
2016-07-28 14:42 0这里只列出部分开发相关内容 notification ... -
android系统提供的常用命令行工具
2016-06-21 13:17 5105本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链 ... -
标示与掩码
2015-10-21 23:00 0掩码(英语:Mask) ... -
通过蓝牙调试(穿戴设备app) - 开发文档翻译
2015-09-30 11:43 2639由于本人英文能力实在 ... -
打包穿戴设备app - 开发文档翻译
2015-09-29 17:19 1873由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
弧形进度条(动画版)
2015-07-23 17:00 5930本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链接 ... -
使用canvas与Paint在View中居中绘制文字
2015-07-15 23:03 8994本博客只要没有注明 ... -
android 关于提高第三方app的service优先级
2014-06-23 23:14 3178本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链 ... -
android <application> 开发文档翻译
2014-05-24 23:47 5152由于本人英文能力实 ... -
android中各种log的抓取
2013-12-23 13:15 01.logcat的使用 2.内存快照的抓取 ... -
android多语言项目中字符串的移植(bash工具)
2013-11-11 13:31 2506有时候我们会遇到这样一种情况: 一些字符串资源要从原始项 ... -
android 高效显示Bitmap - 开发文档翻译
2013-09-13 17:59 2631由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
android 在你的UI中显示Bitmap - 开发文档翻译
2013-09-06 19:33 6632由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
android 管理Bitmap内存 - 开发文档翻译
2013-08-27 15:39 4166由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
android 缓存Bitmap - 开发文档翻译
2013-08-25 13:01 3197由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没有 ... -
android 在UI线程之外处理Bitmap - 开发文档翻译
2013-08-12 13:30 3429由于本人英文能力实 ...
相关推荐
在"android ActionBar与Menu - 2 - email中ActionBar分析"这个主题中,我们将深入探讨如何在Email应用中使用ActionBar及其相关功能。 首先,Email应用在Android设备上的界面设计通常包括ActionBar和Menu。ActionBar...
标题中的“android-actionbar-for-2.x.x.7z”暗示了这个压缩包包含的是一个针对Android 2.x版本的Action Bar实现。Action Bar是Android系统中的一种UI组件,主要用在应用程序的顶部,用于展示应用的标识、提供导航...
### Android 4.0 ActionBar API 知识点详解 #### 一、ActionBar 概述 ActionBar 是 Android 4.0 (API 级别 14) 引入的一个新特性,它替代了传统的标题栏 (title bar),并提供了一个更丰富、更灵活的界面控件,用于...
本资源“android-actionbar-master.zip”提供了一个通用的Android ActionBar实现,旨在帮助开发者更高效地集成和自定义这一组件。 首先,让我们深入理解Android ActionBar的核心功能和设计原则。Action Bar的主要...
在Android开发中,ActionBar是一个非常重要的组件,它在Android 4.0(API级别14)及更高版本中被引入,作为应用界面顶部的标准导航和操作区域。在本示例中,我们将深入探讨如何在Android应用程序中使用和自定义...
1. **初始化与配置**:使用ActionBar-PullToRefresh,你需要在Activity中初始化并配置刷新监听器。通常,这涉及到在onCreate()方法中调用setRefreshingListener(),并设置相应的回调方法处理刷新事件。 2. **适配器...
ActionBarDemo ActionBar初探——ActionBar简述及三类ActionBar的使用 详细内容请看: http://blog.csdn.net/hander_wei/article/details/24182019
`ActionBar`与`Dropdown Menu`的组合使用是Android开发中的常见场景。下面我们将详细探讨如何实现这一功能。 首先,为了在`ActionBar`中添加`Dropdown Menu`,我们需要在`res/menu`目录下创建一个XML文件来定义菜单...
在早期的Android版本(API级别低于11)中,ActionBar并未内置,但随着android-support-v7库的发布,Google为API 11以下的版本提供了对ActionBar的支持,使得开发者可以方便地在低版本设备上实现类似高版本的功能。...
在Android应用开发中,ActionBar是一个重要的组件,它位于应用程序界面的顶部,提供了用户与应用交互的常用操作。本文将深入探讨Android ActionBar的学习要点,并通过源代码解析来加深理解。 首先,我们来了解一下...
在Android应用开发中,ActionBar是一个重要的组件,它位于应用程序界面的顶部,提供了用户与应用交互的关键功能入口。这个“android actionbar简单实例”是针对Android新手或者开发者想要了解和掌握ActionBar基本...
这个项目"android-simple-actionbar-toolbar-app"显然是一个教学示例,旨在展示如何在Android应用中有效地使用这两个元素。下面将详细介绍这两个组件以及如何在Java编程环境中进行集成和使用。 **1. ActionBar** ...
在Android应用开发中,ActionBar是一个重要的组件,它位于应用程序界面的顶部,提供了用户与应用交互的关键功能区。这个"Android ActionBar Demo"旨在展示如何在Android应用中有效地利用和自定义ActionBar,以提升...
- 对于API级别较低的设备,需要使用`android.app.ActionBar`而不是`android.support.v7.app.ActionBar`。 - 使用`Theme.AppCompat`系列的主题,以确保在不同版本的Android上都能正确显示。 7. **组件库component-...
ActionBar-PullToRefresh ActionBar-PullToRefresh provides an easy way to add a modern version of the pull-to-refresh interaction to your application. Please note that this is not an update to Android-...
在Android 3.0(API级别11)及以上版本中,系统原生提供了`ActionBar`,但为了使低版本的Android设备也能享受到这一功能,`appcompat-v7`库进行了实现。通过使用`AppCompatActivity`作为基类,开发者可以为他们的...
ActionBar是Android 3.0(API Level 11)及以上版本中默认包含的一个组件,它为用户提供了一个直观的界面来执行常见的操作,如返回、搜索、设置等。ActionBar不仅提供了一个统一的外观和感觉,还支持动态地添加和...
2. **统一的API**:库提供了与原生ActionBar相同的API接口,这使得开发者能够轻松地在不同版本的Android设备上使用相同的操作代码。 3. **主题支持**:允许开发者自定义ActionBar的颜色、样式和布局,以适应不同...
在Android应用开发中,Action Bar(也称为ActionBar)是用户界面的一个重要组成部分,它通常位于应用程序屏幕的顶部,提供导航、操作以及应用品牌等信息。然而,原生的Action Bar并未提供内置的搜索框功能,开发者...
在Android应用开发中,ActionBar是一个重要的组件,它位于应用程序界面的顶部,通常包含应用的标识、导航选项以及一些操作按钮。自定义ActionBar布局是提升应用界面个性化和用户体验的关键步骤之一。本文将深入探讨...