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

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

Android手机机型种类繁多,但是虚拟按键也就是底部的导航栏,不外乎两种设计方式,一种是作为虚拟按键设计到屏幕内部,一种是作为系统按键设计到屏幕外面。



对于按键在屏幕内部的机型,因为虚拟按键也是屏幕内容的一部分,它也实际占据屏幕一定的高度,在系统应用中虚拟按键默认呈现的都是透明的背景色,但是在用户应用中如果未设置虚拟按键的背景颜色,它默认呈现的多为黑色。


但是我们可能会看到有些App为了统一自己的风格样式,标题栏和底部的虚拟按键的颜色是一致的,他们是怎么实现的呢?


状态栏和标题栏的颜色设置可以通过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。 (API Level与Android版本对照表)
由于我们一个项目中可能会有很多Activity,所以建议把修改虚拟按键的逻辑放在抽取的BaseActivity的onCreate()方法中。

android 系统隐藏和显示虚拟按键的几种方法 阅读详情

相关推荐

微信小程序--动态设置导航栏颜色 (navigationBarBackgroundColor)

如果导航栏被隐藏或者页面没有设置导航栏设置导航栏颜色将会失败。如果尝试了以上方法仍然无法解决问题,建议检查微信小程序开发工具的版本,确保使用的是最新稳定版,或者尝试重启开发工具和手机。检查是否有其他代码逻辑或插件影响了导航栏设置。可能存在其他代码或插件对导航栏进行了修改或覆盖导致设置失败。确保使用有效的十六进制颜色值或颜色名称,并且以字符串形式传入。中调用,或者在需要设置导航栏颜色的事件触发时调用。来启用原生导航栏样式,并获得设置导航栏颜色的权限。检查是否有权限设置导航栏颜色。文件中,可以通过设置

qq_36770411的博客 8919

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

Android手机机型种类繁多,但是虚拟按键也就是底部导航栏,不外乎两种设计方式,一种是作为虚拟按键设计到屏幕内部,一种是作为系统按键设计到屏幕外面。对于按键在屏幕内部的机型,因为虚拟按键也是屏幕内容的一部分,它也实际占据屏幕一定的高度,在系统应用虚拟按键默认呈现的都是透明的背景色,但是在用户应用中如果未设置虚拟按键背景颜色,它默认呈现的多为黑色。但是我们可能会看到有些App为了统一自己的风...

weixin_39646405的博客 3107

Android 系统中修改 SystemUI 导航栏默认背景色

Android 开发中,系统导航栏是用户与设备进行交互的重要界面元素之一。为了提供更好的用户体验,开发人员可能需要修改导航栏的默认背景色以适应特定的应用场景。打开 Android Studio,选择 “File -> New -> New Project”,按照向导指引设置项目的名称和其他相关信息,并确保选择了合适的最低 SDK 版本。完成以上步骤后,你可以编译并运行应用程序,查看导航栏背景色的修改效果。文件中定义你想要的导航栏颜色,并将主题应用应用程序的 Activity 上即可实现这一目标。

2301_79326930的博客 1242

小程序开发API之导航栏的显示、隐藏及修改wx.showNavigationBarLoading、wx.setNavigationBarTitle、wx.setNavigationBarColor

效果展示 wx.showNavigationBarLoading(Object object) 在当前页面显示导航条加载动画 wx.showNavigationBarLoading参数 wx.hideNavigationBarLoading(Object object) 在当前页面隐藏导航条加载动画 wx.hideNavigationBarLoading参数 例如: 效果展示 代码 in...

M.Siebel 1万+

navigationBarTextStyle动态修改状态栏颜色

手机状态栏就是这个区域 近期项目有一个需求 , 手机状态栏是需要进行动态修改颜色的 虽然他也就只有两个取值,一个白色一个黑色,翻阅文档 ,uniapp和微信小程序都写了相关的在页面动态修改的方法 ,但是代码写上去却不生效。 onPageScroll(e) { if (e.scrollTop > 360) { this.isTopBg = true wx.setNavigationBarColor({ frontColor: "#000000", }) } else

weixin_47873655的博客 7742

uni.setNavigationBarColor 设置字体颜色及背景色无效的四个原因

uni.setNavigationBarColor 设置字体颜色及背景色无效的四个原因。1.只设置了背景色,背景色无效。 2. 字体颜色只支持小写的十六进制,否则字体颜色和背景色均无效

qq_40259123的博客 4952

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

原地址:https://blog.csdn.net/github_2011/article/details/74908545   Android手机机型种类繁多,但是虚拟按键也就是底部导航栏,不外乎两种设计方式,一种是作为虚拟按键设计到屏幕内部,一种是作为系统按键设计到屏幕外面。 对于按键在屏幕内部的机型,因为虚拟按键也是屏幕内容的一部分,它也实际占据屏幕一定的高度,在系统应用中虚...

Elvis写代码 5312

完美去掉大黑条!!Android 5.1修改导航栏背景颜色

现在很多手机都是用虚拟按键了,但是很多手机的虚拟按键导航栏背景颜色是黑色的,看起来其丑无比啊,比如华为;要想看上去协调一些,当然是改成透明的啦,怎么改呢?按照以往的思路,当然是直接改布局文件就可以了的,想想这个思路也没错,布局文件位于 frameworks/base/packages/SystemUI/res/layout/navigation_bar.xml但素,我改了之后,发现这样是行不通的

zhonglunshun的专栏 1万+

Android 隐藏虚拟导航栏,禁止下拉通知栏,禁止上滑出虚拟导航栏

Android 隐藏虚拟导航栏 View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | ...

a785722173的博客 1万+

android虚拟键影响布局,解决Android 全屏虚拟按键弹出挤压布局问题!

隐藏虚拟按键public static void hideBottomUIMenu(Activity activity) {if (!checkDeviceHasNavigationBar(activity))return;if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {View v = ac...

weixin_33894125的博客 838

Android 设置5.0以后出现的虚拟按钮背景颜色

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置虚拟按键背景颜色 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIP...

凌云志 827

SystemUI底部三个虚拟按键背景颜色修改

三个虚拟按键设置是在framework层中。     先查看三个按键的布局的初始化: 位置 frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java: protected PhoneStatusBarView makeStatusBarView() { if

Garment1991的专栏 9549

虚拟按键挡住应用的解决办法

&lt;ImageView android:id="@+id/imageView" android:layout_width="match_parent" android:layout_height="wrap_content" android:background=""/&gt;//状态栏颜色,根据自己需求 /* * 状态栏为透明色 * 可以通过添加占位v...

wei844067872的博客 1127

android手机状态栏颜色设置,android设置状态栏的颜色

1.首先设置状态栏为透明。2.再在布局文件中设置布局文件的背景颜色。具体实现:protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {getWindow().addFlags(Wind...

weixin_36455562的博客 2555

android显示状态栏隐藏导航栏代码

/** * 显示状态栏, 隐藏虚拟按键 */ public void hideBottomUIMenu() { //隐藏虚拟按键,并且全屏 if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api if (getWindow() != null) { View v = g

weixin_43841938的博客 1091

Android 9.0系统源码_SystemUI(八)PhoneWindow更新状态栏和导航栏背景颜色的流程解析

通过android9.0系统源码分析Activity、Dialog更新状态栏和底部颜色的过程

AfinalStone的专栏 2396

Android导航栏虚拟按键颜色修改全攻略:从应用到系统级定制

Android系统UI定制一直是开发者和玩机用户关注的高频话题,其中导航栏颜色调整更是涉及从应用层到系统层的复杂博弈。虚拟按键由SystemUI进程统一渲染,普通应用只能通过窗口属性请求背景色与图标深浅,而图标颜色仅有深浅两态,无法指定具体色值。理解WindowInsetsControllerCompat、Edge-to-Edge等现代API的演进,是适配不同Android版本的关键。技术价值在于掌握从应用内可控到系统级Overlay覆盖再到源码修改的完整路径,既能解决日常深色模式适配问题,也能为ROM定制

weixin_29169899的博客 259

BottomSheetDialogFragment底部导航栏颜色调整与适配全攻略

Android应用开发中,底部弹窗与系统导航栏的视觉割裂是常见的适配难题,尤其当BottomSheetDialogFragment遇上深色模式或Android 15强制edge-to-edge时,navigationBarColor等传统写法往往力不从心。要解决底部导航栏颜色不一致,需理解Dialog Window、系统栏属性及界面亮度的协同机制,掌握WindowInsets、对比遮罩关闭等关键技术。本文从基础原理出发,剖析不同Android版本、导航方式差异,并给出封装模板和踩坑指引,帮助开发者让弹层与

weixin_31815843的博客 216
上一篇: Android 7.0安装apk
下一篇: Android 自带描边颜色渐变炫酷进度条
github_2011
博客等级 码龄10年 116粉丝 56原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值