学习android ActionBar (1)

来源:互联网 发布:优酷网络连接失败1100 编辑:程序博客网 时间:2024/05/22 07:00

平台: Intellij IDEA 14 && LinuxMint 17.1
安卓官网上的ActionBar教程是针对Android3.0版本而写的,使用的是v7库来实现,考虑到Android3.0也是N年前的系统了,所以我的学习肯定不会以它为主,在网上找了好多资料,终于摸着了一点门道.

这里写图片描述
其中,[1]是ActionBar的图标,[2]是两个action按钮,[3]是overflow按钮

1. 静态添加AnctionBar 的Item

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"          package="com.tcstory.actionbartesting.app">    <application android:allowBackup="true"                 android:label="@string/app_name"                 android:icon="@drawable/ic_launcher"                 android:theme="@style/AppTheme">        <activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>            </intent-filter>        </activity>    </application></manifest>

android:theme=”@style/AppTheme”这个是生成项目的时候IDE帮我们选择的,它的值如下所示


res/values/styles.xml

<resources>    <!-- Base application theme. -->    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">        <!-- Customize your theme here. -->    </style></resources>

res/menu/menu_main.xml

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android">    <item android:id="@+id/action_compose"          android:showAsAction="ifRoom"          android:title="写作"/>    <item android:id="@+id/action_save"          android:showAsAction="ifRoom"          android:title="保存"/>    <item android:id="@+id/action_setting"          android:showAsAction="never"          android:title="设置"/></menu>

最后,我们需要在主活动中重载默认的onCreateOptionsMenu(Menu)方法

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.menu_main, menu);        return super.onCreateOptionsMenu(menu);}

2. 动态添加AnctionBar 的Item

先要在AndroidManifest.xml中设置好主题,然后在主活动中设置

    @Override    public boolean onCreateOptionsMenu(Menu menu) {        MenuItem compose = menu.add(Menu.NONE, 0, Menu.NONE, "写作");        MenuItem save = menu.add(Menu.NONE, 1, Menu.NONE, "保存");        MenuItem setting = menu.add(Menu.NONE, 2, Menu.NONE, "设置");        compose.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);        save.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);        setting.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);        return super.onCreateOptionsMenu(menu);    }
  • 取消ActionBar的两种方法

    1. 在AndroidManifest.xml中设置
      android:theme="@android:style/Theme.Holo.Light.NoActionBar
    2. 在主活动中设置
      先获取android.app.ActionBar的实例,然后调用它的hide()方法
        protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ActionBar actionBar = getActionBar();        actionBar.hide();    }
  • showAsAction的值
    决定在ActionBar中的Menu Item何时以及以什么方式显示,
    并且只有当Menu Item在ActionBar中的时候,才能以Action Item 的形式显示

    可选的值如下
    android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]

    • always: 总是显示Item,不过可能会让它和ActionBar中的其他UI重叠
    • ifRoom: 只有当有足够空间的时候才放置在ActionBar中,不然会被收进overflow里面
    • never: 直接放入overflow里面
    • withText: 当你同时给一个Item指定一个图标(icon)和标题(title)的时候,默认情况下,只会显示图标,你可以使用这个选项让拥有图标的Item也显示标题.它还可以配合其他选项一起使用,例如<item yourapp:showAsAction="ifRoom|withText" ... />
    • collapseActionView: 与Item相关联的action view可以被折叠起来.

    上面这几个选择按顺序对应MenuItem中的如下几个常量:

    • public static final int SHOW_AS_ACTION_ALWAYS
    • public static final int SHOW_AS_ACTION_IF_ROOM
    • public static final int SHOW_AS_ACTION_NEVER
    • public static final int SHOW_AS_ACTION_WITH_TEXT
    • public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
0 0
原创粉丝点击