一个过时的组件---ActionBar
来源:互联网 发布:淘宝用绒里图片 编辑:程序博客网 时间:2024/05/01 15:19
2016.12.14;
ActionBar的主要的作用就是保持整个app的页面的统一;
这里我们主要想说明一下就是如何让定制自己的ActionBar:
一般来说有两种方法:
1、通过setCustomView()来设置View来设置我们相应的ActionBar
2、通过继承系统的主题,来实现来自定义主题的形式,来实现ActionBar的定制
注意:
1、第一中方式我们需要将actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 设置为自定义模式,但是有一点要注意的就是,即使我们设置了自定义的模式,如果我们在ActionBar,上面如果我们设置了MenuItem的话,MenuItem是不会在我们的自定义的View里面的;
还有一点值得我们注意的就是,我们需要将title,icon,logo,homeAsUp的按钮我们需要让其隐藏,否则就会在我们的view之前显示,(当然如果有需要的话,是可以这样)
从上面的图我们可以看出来就是我们的通过setCustomView()来设置的View,即使我们在view里面的布局设置的是匹配父元素,这个view仍然不能填充满整个ActionBar这里的话,我们是解决的方案:
ActionBar.LayoutParams params = new ActionBar.LayoutParams( ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT); actionBar.setCustomView(mView, params);
这样添加的方法就可以让我们的View填充满整个ActionBar了;
2、同样在第一种方式网上有很多人说左上角有一个左边距离,我们是没有办法消除的,这里的解决方案,比如下面:
我们给ImageView设置了一个状态选择器,但是,我们发现距离左边始终是有点距离的,我们可以将ImageView调大试一下,会发现仍然是存在这个边距的
解决方案:
在ImageView外层包裹一层LinearLayout就可以了,就会发现左边距就消失了
3、第二种方式修改样式:直接继承Theme.AppCompat.Light然后修改里面的主题的属性就可以了
<style name="ActionBarBaseTheme"parent="@style/Theme.AppCompat.Light"> //这里表示的意思就是:ActionBar下面的content内容的背景颜色 <item name="android:windowBackground">@color/window_background</item> //这里表示就是我们点击菜单键的时候弹出的popupWindow的动画的样式,比如poputWindow里面的字体的颜色,popup背景颜色 <item name="android:popupMenuStyle">@style/PopupMenu.ListPopupWindow</item> //这里表示ActionBar的样式,字体颜色,字体的种类,是否有icon之类的 <item name="actionBarStyle">@style/ActionBarBaseStyle</item> //就是那三个点的样式,我们可以通过修改这个,来改变其显示 <item name="actionOverflowButtonStyle">@style/OverflowButton</item> //menuItem的状态选择器 <item name="actionBarItemBackground">@drawable/socialize_titlebar_item_background_selector</item> //Menu里面文字的颜色 <item name="android:actionMenuTextColor">@color/white</item> <style>
4、上面两种方式是可以同时使用的,这样的话,我们ActionBar就会定制程度非常高;
当然在使用ActionBar的时候,有时候我们可能会发现有”三个点的图标“,在有的手机上是不会显示的,我们可以通过这样让其强制显示:
在onCreate里面调用:
private void getOverflowMenu() { try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class .getDeclaredField("sHasPermanentMenuKey"); if (menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { e.printStackTrace(); } }
就可以让ActionBar的三个点完全显示;
安卓交流群 :232748032
- 一个过时的组件---ActionBar
- ActionBar组件
- 关于 ActionBar 的一个问题
- 学C#时遇到的一个"过时"方法 Application.EnableRTLMirroring()
- 这是一个鼠标略过时显示详细的方法。
- AndroidUI组件之ActionBar
- Actionbar组件样式改变
- AndroidUI组件之ActionBar--基于下拉的导航方式
- 永不过时的Lisp
- 过时的手机创意
- 已过时的方法
- 一些过时的感悟
- 那些过时的东西
- Hibernate4的buildSessionFactory过时
- 十大已过时的技能
- MVC的过时
- 过时的优化技巧
- managedQuery过时的解决办法
- 关于c++中字符串和字符指针之间的转化
- KISSY基础篇乄KISSY之Event
- 冒泡排序
- 实习每日总结_20161213
- github使用简介
- 一个过时的组件---ActionBar
- 高斯消元(xor方程组)模板
- Storm——2、Storm原生API编程、并发机制、可靠性与DRPC详解
- 解决vim没有颜色的办法
- 【NOIP2017提高组模拟12.10】幻魔皇
- 直接排序,冒泡排序,二分法排序(折半排序)
- HTC 拉抽屉效果(VRTK)
- 插入排序和选择排序
- java中数组和集合的相互转换