zoukankan      html  css  js  c++  java
  • 初次接触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键都可以显示。

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

  • 相关阅读:
    题解-Quantifier Question
    题解-[WC2011]最大XOR和路径
    笔记-Recursive Queries
    树套树
    SG函数
    题解-Magic Ship
    分块
    文章根据时间段显示的微信名和微信号
    jquery 在页面上根据ID定位(jQuery锚点跳转及相关操作) 经典
    nginx配置反向代理
  • 原文地址:https://www.cnblogs.com/ywkpl/p/4309995.html
Copyright © 2011-2022 走看看