学习android ActionBar (1)

平台: 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)方法

@Override
public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值