完美去掉大黑条!!Android 5.1修改导航栏背景颜色
2017-11-30 10:12
363 查看
现在很多手机都是用虚拟按键了,但是很多手机的虚拟按键的导航栏背景颜色是黑色的,看起来其丑无比啊,比如华为;
要想看上去协调一些,当然是改成透明的啦,怎么改呢?按照以往的思路,当然是直接改布局文件就可以了的,想想这个思路也没错,布局文件位于
frameworks/base/packages/SystemUI/res/layout/navigation_bar.xml
android:background=”@drawable/system_bar_background”
看上去就是改这个背景就可以了,通过grep和find之后找到了这个颜色,它不是一个drawable文件而是一个颜色值:位于frameworks/base/packages/SystemUI/res/values/colors.xml
但素,我改了之后,发现这样是行不通的,不管是改成白色,还是透明色,导航条的背景是万年不变的黑色,改了好几次都没有效果,于是我开始怀疑我的智商。。。。
当然最终的解决办法不是这条路了,这条路显然是不通的,怎么办,看源码,看看导航栏是怎么构造的,怎么添加背景的;
GO!!!
1.看构造函数:
2.前面一大段和背景颜色没有半毛钱关系,因此寄希望于最后一局,我们看到在最后一行构造NavigationBarTransitions的时候导航栏把自己传了过去。我们点进去看看,该文件位于:
嗯,调用了父类的构造方法,并且穿了一个背景颜色过去,看上去就是这里了,我们看下父类构造方法,父类位于frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
我们来看下构造函数:
没错,这里把颜色改变了,也就是说不管布局文件里面怎么改变背景颜色,最后的颜色都会在这里被重新设置。所以要实现半透明,要么就是去掉这行设置代码:
mView.setBackground(mBarBackground);
要么就是把这行代码设置的颜色改成我们需要的透明色,我不太喜欢改代码,所以就注释掉了。然后把布局的背景颜色改成白色试了一下,嗯,有效果,不错不错;
现在已经可以修改了,证明思路不错,具体效果如何呢?我试了下,这么改没办法像状态栏一样动态改变透明度,所以有时候看起来很丑。那应该怎么改才能和状态栏一致呢?
要想看上去协调一些,当然是改成透明的啦,怎么改呢?按照以往的思路,当然是直接改布局文件就可以了的,想想这个思路也没错,布局文件位于
frameworks/base/packages/SystemUI/res/layout/navigation_bar.xml
android:background=”@drawable/system_bar_background”
看上去就是改这个背景就可以了,通过grep和find之后找到了这个颜色,它不是一个drawable文件而是一个颜色值:位于frameworks/base/packages/SystemUI/res/values/colors.xml
<drawable name="system_bar_background">@color/system_bar_background_opaque</drawable>
但素,我改了之后,发现这样是行不通的,不管是改成白色,还是透明色,导航条的背景是万年不变的黑色,改了好几次都没有效果,于是我开始怀疑我的智商。。。。
当然最终的解决办法不是这条路了,这条路显然是不通的,怎么办,看源码,看看导航栏是怎么构造的,怎么添加背景的;
GO!!!
1.看构造函数:
public NavigationBarView(Context context, AttributeSet attrs) { super(context, attrs); mDisplay = ((WindowManager)context.getSystemService( Context.WINDOW_SERVICE)).getDefaultDisplay(); final Resources res = getContext().getResources(); mBarSize = res.getDimensionPixelSize(R.dimen.navigation_bar_size); mVertical = false; mShowMenu = false; mDelegateHelper = new DelegateViewHelper(this); mTaskSwitchHelper = new NavigationBarViewTaskSwitchHelper(context); getIcons(res); mBarTransitions = new NavigationBarTransitions(this); }
2.前面一大段和背景颜色没有半毛钱关系,因此寄希望于最后一局,我们看到在最后一行构造NavigationBarTransitions的时候导航栏把自己传了过去。我们点进去看看,该文件位于:
public NavigationBarTransitions(NavigationBarView view) { super(view, R.drawable.nav_background); mView = view; mBarService = IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); }
嗯,调用了父类的构造方法,并且穿了一个背景颜色过去,看上去就是这里了,我们看下父类构造方法,父类位于frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
我们来看下构造函数:
public BarTransitions(View view, int gradientResourceId) { mTag = "BarTransitions." + view.getClass().getSimpleName(); mView = view; mBarBackground = new BarBackgroundDrawable(mView.getContext(), gradientResourceId); if (HIGH_END) { mView.setBackground(mBarBackground); } }
没错,这里把颜色改变了,也就是说不管布局文件里面怎么改变背景颜色,最后的颜色都会在这里被重新设置。所以要实现半透明,要么就是去掉这行设置代码:
mView.setBackground(mBarBackground);
要么就是把这行代码设置的颜色改成我们需要的透明色,我不太喜欢改代码,所以就注释掉了。然后把布局的背景颜色改成白色试了一下,嗯,有效果,不错不错;
现在已经可以修改了,证明思路不错,具体效果如何呢?我试了下,这么改没办法像状态栏一样动态改变透明度,所以有时候看起来很丑。那应该怎么改才能和状态栏一致呢?
相关文章推荐
- Android 按钮点击切换背景,同时修改文字颜色
- Android修改ActionBar背景颜色和标题颜色的style
- android:修改PagerTabStrip中的背景颜色,标题字体的样式、颜色和图标以及指示条的颜色
- Android 沉浸式状态栏-字体颜色与背景颜色修改实现与兼容
- android中如何去掉pulltorefreshlistview点击item时的背景颜色,与item外边距设置
- Android修改ActionBar背景颜色和标题,菜单颜色 (清晰)
- android基础学习(2)-------修改TextView字体颜色和背景颜色
- Android 导航栏颜色修改
- Android 修改Menu字体颜色和背景
- android 隐藏状态栏和修改状态栏的背景颜色(沉浸式状态栏)
- Android开发实现按钮点击切换背景并修改文字颜色的方法
- Android实现沉浸式通知栏通知栏背景颜色跟随app导航栏背景颜色而改变
- android 通知栏背景颜色跟随app导航栏背景颜色变化而变化
- Android实现沉浸式通知栏通知栏背景颜色跟随app导航栏背景颜色而改变
- 修改ActionBar的样式(overflow按钮图片修改,AcitonBar背景颜色,去掉ActionBar下面的阴影)
- Swift - 修改导航栏的样式(文字颜色,背景颜色,背景图片)
- android 4.2修改设置菜单的背景颜色
- Android中listview的item点击时候去掉背景颜色或者设置成透明的
- 修改iOS导航栏标题的字体颜色和大小以及导航栏的背景图片
- android 去掉listview 点击背景颜色