Android学习:ActionBar简介

目录

PART1:介绍

PART2:系统默认Actionbar用法简介

1.在onCreate中设置Actionbar

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

3 . Actionbar样式自定义

4.导航栏结构

5.ActionBar中添加下拉菜单

6.配置导航栏


PART1:介绍

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

PART2:系统默认Actionbar用法简介

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

1.在onCreate中设置Actionbar

home键即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:titleitem 的标题
android:icon
item 显示的图标
android:showAsActionitem 显示的方式

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

属性说明
ifRoom会显示在 Item 中,但是如果已经有 4 个或者 4 个以上的 Item 时会隐藏在溢出列表中。当然个数并不仅仅局限于 4 个,依据屏幕的宽窄而定
never永远不会显示。只会在溢出列表中显示,而且只显示标题,所以在定义 item 的时候,最好把标题都带上
always无论是否溢出,总会显示
withTextwithText 值示意 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样式自定义

<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>

4.导航栏结构

1、 区域1App icon:主要用于展示App的Logo显示应用程序的icon,或者自己定义的任何图片以及应用程序的名称(title)或者任何自定义的标题。如果当前界面不是一级界面,还可以展示返回导航。

2、(区域2View Control:用于切换不同的视图或者展示非交互信息如app标题等。

ActionBar 主要有三种导航模式

 <1>standard(默认)这种导航模式下,这个区域没有起作用

 <2>list这种模式下,这个区域显示为一个下拉列表,可以为列表的每一个选项设计一个页面显示

 <3>tab这种模式下,这个区域没有起作用,但是在ActionBar的下方会嵌入Tab式的导航视图,用户可以通过tab进行页面切换

3、区域3  Action Buttons:用于展示app中最重要的操作按钮,如果过多actionbar中放不下则会转移到Action overflow中,长按会展示操作名称。根据文档说明,Action Buttons的总宽度不会超过ActionBar的50%。

4、 区域4 Action overflow:用于存放展示相对较少使用的操作按钮,要是表示还有没有显示完的Action Buttons

图标的显示受以下因素影响

<1>menu items的showAsAction的影响,如果设置为never,那么点击这个图标,items就会显示。如果设置为ifRoom,但是Action Items区域已经没有足够的区域来显示这个items,那么这个items,就不会在ActionBar上显示,点击这个图标,这个items才会显示出来。

<2>menu items 的数量,如果所有的items已经全部显示在actionbar上了,那么就没有还没有显示的items了,这个图标就没有必要显示了。

总的说来,这个图标就是显示溢出的items,这个溢出的条件是由items的数量以及showAsAction 属性决定的。

5.ActionBar中添加下拉菜单

在ActionBar中添加下拉菜单,主要有一下几个关键步骤:

1. 生成一个SpinnerAdapter,设置ActionBar的下拉菜单的菜单项

2. 实现ActionBar.OnNavigationListener接口,当点击ActionBar的菜单项是进行相应的操作

3.调用setNavigationMode()方法将ActionBar的操作模型设置为ActionBar.NAVIGATION_MODE_LIST. 注意:这个步骤应该在Activity的onCreate()回调函数时执行

4. 调用setListNavigationCallbacks()方法为ActionBar添加适配器和监听器.

6.配置导航栏

         ActionBar.DISPLAY_SHOW_HOME:设置显示logo和icon图标。

         ActionBar.DISPLAY_SHOW_TITLE:表明activity的标题和子标题

         Actionbar.DISPLAY_SHOW_custom:展示定制的视图如果被设置了


            //设置导航栏的样式(ActionBar.DISPLAY_SHOW_HOME:设置显示logo和icon图标。
            //                ActionBar.DISPLAY_SHOW_TITLE:表明activity的标题和子标题
            //                Actionbar.DISPLAY_SHOW_custom:展示定制的视图如果被设置了
            mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);
       

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值