初次接触Android ActionBar比较烦人的问题[转]

本文转自:http://blog.csdn.net/u010933209/article/details/40112079

问题一:icon不能正常显示

一直都对actionbar又爱又恨,特别是刚接触的时候有个十分头疼的问题,就是明明ShowAsAction没有设为never,怎么就是没显示?

后来对比了eclipse生成的menu和自己写的menu文件,发现eclipse生成的menu会多个命名空间 xmlns:app="http://schemas.android.com/apk/res-auto",而且eclipse自动生成的icon前缀则是app:icon,然后把自己定义item的icon前缀也改为app,果然可以正常显示了。

以下这段是Google Android 官方培训教程看到的:

如果你为了兼容 Android 2.1 的版本使用了 Support 库,在 android 命名空间下 showAsAction 属性是不可用的。Support 库会提供替代它的属性,你必须声明自己的 XML 命名空间,并且使用该命名空间作为属性前缀。(一个自定义 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>  

也就是说,如果你用了android.support.v7包,则icon属性前缀必须是自定义的命名空间前缀,icon才会正常显示。

问题二:overflow无法显示

对初学者来说又是一个比较抓狂的问题。抓破头都很难想出一个所以然来。

后来网上找资料才发现原来是跟手机硬件有关。如果你手机已经有物理menu键,overflow就不会显示。如果要显示就只能通过代码控制了。

private void setOverflowShowingAlways() {
    try {
        ViewConfiguration config = ViewConfiguration.get(this);
        Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
        menuKeyField.setAccessible(true);
        menuKeyField.setBoolean(config, false);
    } catch (Exception e) {
        e.printStackTrace();
    } 

然后在onCreate方法中调用该方法

没错,就是通过反射来改变overflow 的默认设置,让其无论有没有物理menu键都可以显示。

不得不吐槽这蛋疼的设计。

时间: 2024-10-25 01:49:10

初次接触Android ActionBar比较烦人的问题[转]的相关文章

初次接触android studio

因为参加了一项比赛“创青春”——创业类的比赛,而我们的项目是制作一款快递app. 我们学校的学生尚未在课堂上接触到和app有关的任何知识,所以,这对于我们团队来说是一个不小的挑战,毕竟现在都大三下学期了,很多同学要么忙着考研要么忙着找工作赚钱,所以时间是很紧迫的.因为,像“互联网+”这类型的比赛越来越多,有不少同学都想借着比赛提升自我.身边就有一些学长,经常参加这一类的比赛,在老师的带领下,自己在实验室不断地摸索着,进步着.通过学长得知,他们制作app使用的工具有两种,一个是eclipse另一个

初次接触 Android Studio FAQ

1. 2. 3. 4. 6. 7. Tools -> Adnroid -> enable ADB integration 8.官方模拟器太慢,还是自己下个第三方模拟器吧. http://www.genymotion.net/ 9.下载虚拟设备老是不行,咋办? 打开C:\Users\用户名\AppData\Local\Genymobile\genymotion.log 从里边可以找到相关下载地址:9月 24 12:56:27 [Genymotion] [Debug] Downloading fi

《驱蚊神器v1.0》android应用 赶走那些烦人的臭蚊子

<驱蚊神器v1.0>可以很好地赶走那些个烦人又恼人伤人的臭蚊子,它总是搞得自己没有好的睡眠或休息,得努力地拍巴巴掌,这下可好了,也少些烦恼了,先深情地眯缝一会儿...此声波怡人不会对人产生负影响,请放心使用,如果打扰到自己可以减小音量工作,好的话请告诉你的小伙伴吧,要退出可以按MENU! <驱蚊神器v1.0>下载地址:http://url.cn/RuGcnE 另同时上线的3个应用的下载地址分别为为: <飞车达人v1.0.3>android游戏更新地址:http://ur

Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/18234477 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工,英文好的朋友也可以直接去读原文. http://developer.android.com/guide/topics/ui/actionbar.html Action Bar是一种新増的导航栏功能,在Android 3.0之后加入到系统的API当中,它标识了用户当前操作界面的位置,并提供了额外的用

【转】Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/18234477 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工,英文好的朋友也可以直接去读原文. http://developer.android.com/guide/topics/ui/actionbar.html Action Bar是一种新増的导航栏功能,在Android 3.0之后加入到系统的API当中,它标识了用户当前操作界面的位置,并提供了额外的用

Android actionbar 搜索框

就是实现在顶部这样的搜索框. 一.这个搜索框是actionbar上的menu上的一个item.叫SearchView.我们可以先在menu选项里定义好: bmap_menu.xml: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item androi

android ActionBar(官方指导)

安装ActionBar: Support Android 3.0 and Above Only(仅支持3.0版本之后) <manifest ... > <uses-sdk android:minSdkVersion="11" ... /> ... </manifest> Support Android 2.1 and Above(如果想让应用支持3.1版本之后,需如下操作) 1安装v7 appcompat 库 2Update your activit

Android ActionBar应用实战,高仿微信主界面的设计

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/26365683 经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对较为深刻的理解了.唯一欠缺的是,前面我们都只是学习了理论知识而已,虽然知识点已经掌握了,但是真正投入到项目实战当中时会不会掉链子还很难说.那么不用担心,本篇文章我就将带领大家一起进入ActionBar的应用实战,将理论和实践完美结合到一起. 如果你还没有看过我的前两篇文章,建议先去阅读一下 Andr

Android ActionBar通过Tab进行不同的Fragment之间的交换

ActionBar的使用常见于4.0系统,其Tab的使用挺广泛的. 在ActionBar中添加标签(Tabs),每个标签对应的是一个Fragment,点击不同的Tab时,就会切换到对应的Fragment. 大致的步骤如下: 1.如同TabHost控件,每个tab下需要添加内容,这个内容需要结合fragment来显示,因此需创建fragment类,有几个tab就需要几个继承Fragment的类: 2.将fragment添加至ActionBar Tab上,并添加tab监听: 3.监听内部类需要实现A