Skip to content

Android 设置应用的底部导航栏(虚拟按键)背景颜色

Mr.wu edited this page Oct 19, 2017 · 3 revisions

状态栏和标题栏的颜色设置可以通过theme主题来控制,这里不做介绍了,下面说一下如何改变底部虚拟按键的背景颜色: 在Window类中有一个方法可以设置虚拟按键的背景颜色

public abstract void setNavigationBarColor(@ColorInt int color);  

大家看到了这是一个抽象方法,那么Window的子类有没有实现这个方法呢,Window有一个子类PhoneWindow它实现了父类所有的抽象方法

@Override  
    public void setNavigationBarColor(int color) {  
        mNavigationBarColor = color;  
        mForcedNavigationBarColor = true;  
        if (mDecor != null) {  
            mDecor.updateColorViews(null, false /* animate */);  
            mDecor.updateNavigationGuardColor();  
        }  
    }  

我们如何得到PhoneWindow对象呢?

//在Activity 类中有这样一个Api:  
public Window getWindow() {  
    return mWindow;  
}  

这个mWindow对象在Activity 类的attach方法中进行了实例化:

final void attach(Context context, ActivityThread aThread,  
            Instrumentation instr, IBinder token, int ident,  
            Application application, Intent intent, ActivityInfo info,  
            CharSequence title, Activity parent, String id,  
            NonConfigurationInstances lastNonConfigurationInstances,  
            Configuration config, String referrer, IVoiceInteractor voiceInteractor,  
            Window window) {  
        attachBaseContext(context);  
  
        mFragments.attachHost(null /*parent*/);  
  
        mWindow = new PhoneWindow(this, window);  
        //....省略若干行         
    }  

mWindow正是PhoneWindow的实例,到此我们就可以在Activity中改变系统虚拟按键的背景颜色了

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {  
            getWindow().setNavigationBarColor(Color.parseColor("#1bb5d7"));  
            //getWindow().setNavigationBarColor(getResources().getColor(R.color.black));  
            //getWindow().setNavigationBarColor(Color.BLUE);  
}  

这里有一个系统版本的判断,因为setNaviationBarColor(int color)这个Api是在API Level 21才出现的,即Android 5.0及以上的机型才可以使用该Api。 由于我们一个项目中可能会有很多Activity,所以建议把修改虚拟按键的逻辑放在抽取的BaseActivity的onCreate()方法中。

Home

Android 开发录

-深入理解LayoutInflater.inflate()的参数

计算机网络原理

数据库

Java 垃圾回收机制

Java 开发录

面试

搭建翻墙shadowsocks 教程

其他

Clone this wiki locally