自定义Actionbar的相关说明

工作中我们经常会自定义ActionBar才能满足自己的需求,这不,小编就到了该自定义actoinbar的时刻,可是在实现过程中并非一帆风顺(黑人无辜脸^-^)…… 写这篇博客就是为了记录下自己曾经遇到的坑,以便日后重蹈覆辙。

要自定义ActionBar其实是有三个思路的:
1.当前Activity的主题设置为NoTitleBar,然后将自定义的actionbar布局作为activity的布局文件中的一个普通布局即可;
2.当前Activity的主题设置为有ActionBar的模式,然后调用系统ActionBar的hide()方法隐藏起来,再将自定义的actionbar布局作为activity的布局文件中的一个普通布局即可;
3.当前Activity的主题设置为有ActionBar的模式,然后调用setCustomView(View view)api为系统的ActionBar设置一个inflate出来的自定义布局替换原来系统的actionbar布局;

因为前面2种方式比较简单,这里主要讲述第三种方法:
设置当前Activity的theme为ActionBar的NokiaAppTheme2。其中NokiaAppTheme2的parent是AppBaseTheme。(因为开发时使用的是诺基亚一款智能手机)即

<style name="NokiaAppTheme2" parent="AppBaseTheme">

</style>

做这个说明是为了告诉你们:这个主题是会显示系统的ActionBar的。

因为是跟短信相关的应用,因此当前的Activity命名为MessageListActivity。在MessageListActivity的onCreate()方法中调用了initActionBar():

    private void initActionBar() {    
        mCustomActionBar = (ViewGroup)getLayoutInflater().inflate(
                             R.layout.layout_webview_custom_action_bar,null);
        getActionBar().setCustomView(mCustomActionBar);
        getActionBar().setDisplayShowCustomEnabled(true);
        getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        }

如果不调用getActionBar().setDisplayShowCustomEnabled(true)的显示结果为:
这里写图片描述
即自定义的ActionBar并没有生效。

如果不调用getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM)显示结果为:
这里写图片描述
即还有一个icon显示在左边。

这时即使调用了getActionBar().setDisplayShowHomeEnabled(false)最多只能隐藏左边的icon 图标,并不能隐藏最左边黑色的那一小块:
这里写图片描述

因此这里一定要同时调用


getActionBar().setDisplayShowCustomEnabled(true);
getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
这2个api才能达到最终我们要的效果:
这里写图片描述

此时会发现在上图的最右侧出现了2个menu的图标。这是在你的Activity的 onCreateOptionsMenu(Menu menu)方法设置了menu菜单,所以就在自定义的actionbar的右侧又显示了系统的menu菜单图标的原因了,导致画面特别尴尬@#¥¥¥¥:

这里写图片描述

此时将onCreateOptionsMenu(Menu menu)里面自己实现的代码删掉,直接使用父类的代码即可解决上述问题:
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值