美文网首页
Actionbar简介

Actionbar简介

作者: ccbuluo | 来源:发表于2017-05-10 19:35 被阅读0次

    原文出处:http://www.ccbu.cc/android/actionbar-intro

    ActionBar是Android 3.0以后Anrdoid系统增加的导航栏功能控件。它标识了用户当前操作界面的位置,并提供了额外的用户动作、界面导航等功能。使用ActionBar的好处是,它可以给提供一种全局统一的UI界面,使得用户在使用任何一款软件时都懂得该如何操作,并且ActionBar还可以自动适应各种不同大小的屏幕。由于ActionBar是在3.0以后的版本中加入的,如果想在2.x的版本里使用ActionBar的话则需要引入Support Library。

    1 . 系统默认Actionbar用法简介

    首先介绍在Android 3.0以上的系统中使用系统默认的Actionbar的使用方法。在3.0以上的系统中,通过直接集成最基础的Activity即可使用Actionbar。

    在onCreate中设置Actionbar

    ActionBar actionBar = getActionBar();
    if (actionBar != null) {
        actionBar.setLogo(R.drawable.ic_logo);//自定义logo
        actionBar.setDisplayUseLogoEnabled(true);//使能用户自定义logo
        actionBar.setHomeButtonEnabled(true);//设置actionBar的Home键可点击
    }
    

    在子界面中我们可以配置返回上一级的操作,此时actionbar中会多出一个返回箭头。onCreate中可以做如下的操作:

    mActionBar = getActionBar();
    if (mActionBar != null){
        mActionBar.setDisplayHomeAsUpEnabled(true);//设置Home按键作为返回上一级
        mActionBar.setDisplayShowHomeEnabled(false);//不显示Home键Icon
    }
    

    另外还需要在AndroidManifest.xml的Activity中配置android:parentActivityName属性。

    <activity
        android:name="SubActivity"
        android:parentActivityName="ParentActivity"/>
    

    2 . **为Actionbar添加菜单项 **

    首先需要在res/menu/下新建一个menu文件menu_set.xml

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        tools:context="com.test.test.MainActivity">
        <item
            android:id="@+id/refresh"
            android:orderInCategory="100"
            android:title="/刷新"
            android:icon="@drawable/ic_refresh"
            android:showAsAction="always"/>
        <item
            android:id="@+id/setting"
            android:orderInCategory="100"
            android:title="设置"
            android:icon="@drawable/ic_settings"
            android:showAsAction="ifRoom"/>
        <item
            android:id="@+id/play"
            android:orderInCategory="100"
            android:title="退出"      
            android:icon="@drawable/ic_exit"
            android:showAsAction="never"/>
    </menu>
    

    Menu 标签中 Item 标签的主要属性包括:

    属性名 定义
    android:orderInCategory 表示每个 item 的优先级,值越大优先级越低, actionbar 地方不够就会放到 overflow 中
    android:title item 的标题
    android:icon item 显示的图标
    android:showAsAction item 显示的方式

    其中 showAsAction 属性接包含以下一些定义:

    属性 说明
    ifRoom 会显示在 Item 中,但是如果已经有 4 个或者 4 个以上的 Item 时会隐藏在溢出列表中。当然个数并不仅仅局限于 4 个,依据屏幕的宽窄而定
    never 永远不会显示。只会在溢出列表中显示,而且只显示标题,所以在定义 item 的时候,最好把标题都带上
    always 无论是否溢出,总会显示
    withText withText 值示意 Action bar 要显示文本标题。 Action bar 会尽可能的显示这个标题,但是,如果图标有效并且受到 Action bar 空间的限制,文本标题有可能显示不全
    collapseActionView 声明了这个操作视窗应该被折叠到一个按钮中,当用户选择这个按钮时,这个操作视窗展开。否则,这个操作视窗在默认的情况下是不可见的。一般要配合 ifRoom 一起使用才会有效果

    定义好menu配置文件后,在代码中加载menu。

    public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.menu_set, menu);
            return true;
        }
    

    而通过重写onOptionsItemSelected,即可对相应菜单的select事件进行处理。
    在一些有物理菜单按钮的机器上,默认情况下overflow按钮可能会出现显示不出来的情况,通过onCreate中调用以下函数即可显示出来。

    /**
     * 即使有物理菜单键也显示ActionBar的flowMenu
     */
    public static void showOverflowMenu(Context context) {
        try {
            ViewConfiguration config = ViewConfiguration.get(context);
            //使用java反射技术,获取getDeclaredField类的私有属性sHasPermanentMenuKey
            Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
            if(menuKeyField != null){
                menuKeyField.setAccessible(true); //将属性设为可访问的
                menuKeyField.setBoolean(config, false);  //为属性赋值为false
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    3 . Actionbar样式自定义

    ActionBar默认的样式是很丑陋的,所以下面简单的介绍一下如何进行自定义ActionBar的样式。

    <style name="AppThemeBase" parent="android:Theme.Holo">
        <item name="android:actionOverflowButtonStyle">@style/actionbar_overflow</item>//overflow按钮样式,即最右边点击弹出隐藏菜单项的按钮
        <item name="android:actionBarStyle">@style/actionbar_style</item>//actionbar样式
        <item name="android:homeAsUpIndicator">@drawable/icon_back</item>//设置上一级按钮图标资源
        <item name="android:windowActionBarOverlay">true</item>//设置actionbar悬浮显示
    </style>
    <style name="actionbar_overflow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
        <item name="android:src">@drawable/ic_overflow</item>//设置overflow按钮图标
    </style>
    <style name="actionbar_style" parent="@android:style/Widget.Holo.ActionBar">
        <item name="android:background">@color/backgnd</item>//设置actionbar背景颜色,可以设置为半透明的颜色
        <item name="android:titleTextStyle">@style/actionbar_title_text</item>//设置标题文字样式
    </style>
    <style name="actionbar_title_text" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
        <item name="android:textSize">18dp</item>//设置文字大小
    </style>
    

    同过上面的例子,我们就可以举一反三的定义自己想要的样式。

    相关文章

      网友评论

          本文标题:Actionbar简介

          本文链接:https://www.haomeiwen.com/subject/jjngtxtx.html