Android ActionBar使用笔记

Android笔记21】Android中的导航栏ActionBar的介绍及使用 ActionBar,从名称上来看,Action表示动作,Bar表示条,柱,ActionBar就表示动作条,翻译过来就是导航栏的意思。几乎在任何一个APP应用里面,都可以看见ActionBar使用ActionBar是位于APP应用页面最底部区域的一个组件视图,例如下面这些APP界面中就有ActionBar的应用。... 阅读详情

将actionbar常用方法整理,以便以后使用.

一. 实现action bar:
1.修改styles.xml 文件

<resources>
    <style name="AppTheme" parent="@android:style/Theme.Holo.Light">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

注意: 将AppTeme的父类改成@android:style/Theme.Holo.Light 因为主题应该是Theme.Holo 或 Theme.Holo的子类才能显示actionbar

2.创建action bar的布局文件
在menu下创建activity_actions.xml文件, 例如:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/action_search"
        android:icon="@mipmap/ic_action_search"
        android:title="搜索"
        android:showAsAction="always" />
    <item android:id="@+id/action_settings"
         android:title="设置"
        android:showAsAction="ifRoom"/>
</menu>

shouAsAction属性可以是以下值:
(1) alaways: 这个值会使菜单项一直显示在ActionBar上
(2) ifRoom: 如果有足够的空间,这个值会使菜单显示在ActionBar上
(3) never: 这个值菜单永远不会出现在ActionBar
(4) withText: 这个值使菜单和它的图标, 菜单文本一起显示。

3.在使用的activty中添加代码:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        //将菜单布局引入
        inflater.inflate(R.menu.main_activity_actions, menu);
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_search:
                //TODO:进行对应逻辑处理
                return true;
            case R.id.action_settings:
                //TODO:进行对应逻辑处理
                return true;
            default:
            return super.onOptionsItemSelected(item);
        }
    }

效果:

这里写图片描述

二. 添加 Up Button

这里写图片描述

1.首先在onCreate中添加下面代码:

  setContentView(R.layout.activity_main);
  ActionBar actionBar = getActionBar();
  actionBar.setDisplayHomeAsUpEnabled(true);

2.需要在AndroidManifest.xml中配置父Activity

 <activity android:name=".XXXActivity">
             <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.XXXX.XXXX.MainActivity" />
 </activity>

在4.1后可以写成:

<activity 
    android:name=".TabActivity"
    android:parentActivityName=".MainActivity" > 
</activity> 

3.对android.R.id.home这个事件ID进行一些处理

@Override 
public boolean onOptionsItemSelected(MenuItem item) {  
    switch (item.getItemId()) {  
    case android.R.id.home:  
        Intent upIntent = NavUtils.getParentActivityIntent(this);  
        if (NavUtils.shouldUpRecreateTask(this, upIntent)) {  
            TaskStackBuilder.create(this)  
                    .addNextIntentWithParentStack(upIntent)  
                    .startActivities();  
        } else {  
            upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
            NavUtils.navigateUpTo(this, upIntent);  
        }  
        return true;  
        ......  
    }  
}

三. 实现有搜索框的功能
1.修改menu目录下的activity_action.xml中的sreach, 添加actionViewClass属性:

    <item android:id="@+id/action_search"
        android:icon="@mipmap/ic_action_search"
        android:actionViewClass="android.widget.SearchView"
        android:title="搜索"
        android:showAsAction="always" />

2.对SearchView进行属性配置

@Override 
public boolean onCreateOptionsMenu(Menu menu) {  
    MenuInflater inflater = getMenuInflater();  
    inflater.inflate(R.menu.main, menu);  
    MenuItem searchItem = menu.findItem(R.id.action_search);  
    SearchView searchView = (SearchView) searchItem.getActionView();  
    // 配置SearchView的属性  
    //......  
    return super.onCreateOptionsMenu(menu);  
}  

四. overflow按钮不显示问题
如果手机有menu物理按键的话, 我们在menu中的xml里配置的属性showAsAction为never的item, 将不会显示.

如何处理? 通过反射获得sHasPermanentMenuKey方法, 让它永远返回false

@Override 
protected void onCreate(Bundle savedInstanceState) {  
    ......  
    setOverflowShowingAlways();  
}  

private void setOverflowShowingAlways() {  
    try {  
        ViewConfiguration config = ViewConfiguration.get(this);  
        Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");  
        menuKeyField.setAccessible(true);  
        menuKeyField.setBoolean(config, false); //设置为false 
    } catch (Exception e) {  
        e.printStackTrace();  
    }  
}

五. 让Overflow按钮中的选项显示图标
overflow中的Action按钮应不应该显示图标,是由MenuBuilder这个类的setOptionalIconsVisible方法来决定的. 传入true显示图标.

@Override  
public boolean onMenuOpened(int featureId, Menu menu) {  
    if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {  
        if (menu.getClass().getSimpleName().equals("MenuBuilder")) {  
            try {  
                Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);  
                m.setAccessible(true);  
                m.invoke(menu, true);  
            } catch (Exception e) {  
            }  
        }  
    }  
    return super.onMenuOpened(featureId, menu);  
}
android--menu showAsAction的使用 app中有一个菜单(menu)按钮,其属性:showAsAction主要是针对这个菜单的显示起作用的,它有三个可选项 always: never: ifRoom:如果界面有位置才显示,不然就出现在菜单按钮的三个点中 例子:首先全部设置为never,不显示在界面上,只让出现在菜单按钮上 <menu xmlns:android="http://schemas.androi 阅读详情

相关推荐

android提供的向上导航栏

参考:http://blog.csdn.net/aikongmeng/article/details/37934741  使用Android自带的返回操作 在AndroidManifest.xml中标签添加属性android:parentActivityName=".MainActivity"。或者添加标签,添加android:name属性,对应的值是android.support

hxltech的专栏 1754

Android开发之Menu和actionBar

一、通过Menu目录下创建一个布局文件:   先看代码meu/main.xml: 1 <?xml version="1.0" encoding="utf-8"?> 2 <menu xmlns:android="http://schemas.android.com/apk/res/android"> 3 <item android:id="@+...

weixin_30911809的博客 147

android:showAsAction报错的解决办法

android:showAsAction报错的解决办法

rznice的专栏 9596

Android笔记 标题栏ActionBar

一、ActionBar介绍   在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个非常重要的交互元素,Action Bar取代了传统的tittle bar和menu,在程序运行中一直置于顶部,对于Android平板设备来说屏幕更大它的标题使用Action Bar来设计可以展示更多丰富的内容,方便操控。   二、ActionBar的功能

JohnDeng520的博客 860

安卓学习笔记——ActionBar使用

ActionBarAndroid3.0引进 如果app兼容3.0一下的版本,使用ActionBar,要兼容V7包,不讲3.0以下使用方法。目前3.0以下的安卓机已很少。   3.0以上: 指定Activity的主题:Theme.Holo....,或者不用自己指定,有个默认主题就是。     获取ActionBar对象 getActionBar()   显示

心田祭思博客 1000

Android ActionBar Tabs学习笔记

本例主要实现用Tab切换不同的Fragment,点击View显示or隐藏ActionBar,把ActionBar 设为透明,使界面更加友好,详细代码见资源里的ActionBarTabs。 ActionBar Tab主要用于Fragment之间的切换,其必须要设置ActionBa

Flying_tao的专栏 2万+

Android actionbar 笔记

ActionBar是一种新増的导航栏功能,在Android 3.0之后加入到系统的API当中,它标识了用户当前操作界面的位置,并提供了额外的用户动作、界面导航等功能。 参考链接 https://developer.android.com/training/appbar/index.html?hl=zh-cn http://blog.csdn.net/guolin_blog/article/deta...

weixin_34050519的博客 77

安卓开发文档学习笔记ActionBar使用与适配

ActionBar 自从Android3.0(API 11)把ActionBar加入到android sdk后,其在安卓UI布局中的地位便一路上升。通过安卓的官方文档可以看出,ActionBar的出现旨在为用户提供一个更加简洁和友好的UI框架。同时开发者通过采用ActionBar也可以获得诸多好处(比如APP在高版本安卓系统中更好的稳定性)。 ActionBar使用 对于Andor

慕斯筱婕 584

安卓开发文档学习笔记之实现ActionBar中Tab导航

上篇文章说到如何在安卓项目中添加ActionBar(前文请戳这里),在添加完ActionBar之后,就可以用它做一些更加有趣的事情了,比如这篇文章要说的Tab导航。 首先,上一张官方文档的Tab导航展示图 图1 Tab导航展示 如图所示,Tab导航一般位于ActionBar的下方,通常由三个Tabs组成(当然选项卡的数量是可以自定义的),其中每个Tab关联一个Fragment,通过在

sinat_30474567的博客 942

Android学习笔记ActionBar

http://developer.android.com/guide/topics/ui/actionbar.html 1,ActionBar的几种形式 2,使用ActionBar需要Activity开启了带ActionBar的主题 Theme.Holo <activity android:theme="@style/Theme.AppCompat.Light"...

dazhi121812的博客 108

Android ActionBar Item学习笔记

本例主要讲述ActionBar Item的使用方法。在手机上,按Menu键出现Menu菜单,但是在平板中可以把菜单放在ActionBar里面,放置的Item也比手机上多,下面详细介绍其用法: 1、在Androidmanifest.xml里面加上 android:minSdkV

Flying_tao的专栏 3万+

Android学习笔记044之Actionbar和Toolbar

这一篇我们介绍两个相似的控件,分别是Actionbar和Toolbar。Actionbar  ActionbarAndroid3.0之后的一个重要的交互元素,Actionbar位于Activity的顶部,用于显示图标、菜单、标题,广泛用于View的交互、导航等功能。在Android3.0之后,Actionbar是默认添加的,只要你新建的Activity继承于AppCompatActivity,Ac

Huawen的博客 1709

Android笔记 actionbar学习

actionbar学习笔记

积跬步 至千里 275

安卓自学笔记:14:ActionBar

ActionBar位于传统标题栏的位置

程序猿的自学之路 351

Android ActionBar学习笔记

AnctionBar是Android3.0之后引入的机制,targetSdkVersion的值不低于11,创建的Activity中默认都会带有ActionBar。 <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="11" /> ...

huacong20082009的专栏 273

Android开发笔记(二十)顶部导航栏ActionBar

标题栏ActionBar ActionBar是在Android3.0之后引入的,所以Android2.x之前的版本不能直接使用ActionBar。现在ActionBar广泛用做APP的顶部导航栏,它在布局上主要分为三部分:左边是返回区域,包括logo、返回箭头、左侧标题等等;右边是菜单区域,放的是溢出菜单OverflowMenu的各菜单项;中间是条件区域,包括导航项Navigation(下拉列表

aqi00的博客 1万+
上一篇: android dialog背景模糊化效果
下一篇: android 使用反射获取MediaPlayer的Invoke方法
lbcab
博客等级 码龄14年 33粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值