一个过时的组件---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

0 0
原创粉丝点击