You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android手势导航模式下如何隐藏或设置底部系统细线为透明?

Android手势导航模式下如何隐藏或设置底部系统细线为透明?

我之前也碰到过一模一样的问题!你说的这条细黑线其实是Android手势导航模式下系统默认的导航栏底部指示器,用来引导用户识别手势操作的触发区域。下面给你几个经过实测有效的解决方法:

  • 全局主题配置(一次性搞定所有页面)
    打开你的App主题配置文件(res/values/styles.xmlres/values/themes.xml),在你使用的App主题中添加以下属性:

    <!-- 隐藏导航栏底部的分割线(细线) -->
    <item name="android:windowNavigationBarDividerColor">@android:color/transparent</item>
    <!-- 将导航栏背景设为透明 -->
    <item name="android:windowNavigationBarColor">@android:color/transparent</item>
    <!-- 针对Android 10及以上版本,关闭系统强制的导航栏对比度 -->
    <item name="android:enforceNavigationBarContrast">false</item>
    <!-- 可选:开启导航栏透明效果 -->
    <item name="android:windowTranslucentNavigation">true</item>
    

    其中android:windowNavigationBarDividerColor就是直接控制那条细线颜色的属性,设为透明后就完全看不到了;enforceNavigationBarContrast是避免系统自动把指示器改成深色来保证对比度。

  • 单个Activity动态设置(仅修改特定页面)
    如果只想让某几个页面隐藏这条细线,可以在对应Activity的onCreate方法中添加代码:
    👉 Kotlin版本:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 适配Android 10及以上版本
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            window.navigationBarDividerColor = Color.TRANSPARENT
            window.isNavigationBarContrastEnforced = false
        }
        // 设置导航栏背景透明
        window.navigationBarColor = Color.TRANSPARENT
    }
    

    👉 Java版本:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 适配Android 10及以上版本
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            getWindow().setNavigationBarDividerColor(Color.TRANSPARENT);
            getWindow().setNavigationBarContrastEnforced(false);
        }
        // 设置导航栏背景透明
        getWindow().setNavigationBarColor(Color.TRANSPARENT);
    }
    
  • 全屏页面特殊处理
    如果你的页面需要全屏显示(比如游戏、视频播放页),可以加上全屏标记,同时确保内容不会被手势区域遮挡:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 开启全屏布局,让页面延伸到系统导航区域
        window.setFlags(
            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
        )
        // 关闭对比度强制并隐藏细线
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            window.isNavigationBarContrastEnforced = false
            window.navigationBarDividerColor = Color.TRANSPARENT
        }
        window.navigationBarColor = Color.TRANSPARENT
    
        // 可选:给页面底部内容添加padding,避免被手势操作区域遮挡
        val contentView = findViewById<View>(android.R.id.content)
        ViewCompat.setOnApplyWindowInsetsListener(contentView) { view, insets ->
            val navBarHeight = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom
            view.setPadding(view.paddingLeft, view.paddingTop, view.paddingRight, navBarHeight)
            insets
        }
    }
    

小提醒

有些定制ROM(比如小米、华为的系统)可能有自己的手势导航样式,上面的方法基本都能适配,但如果遇到特殊情况,可以建议用户在手机的开发者选项中关闭“手势导航指示器”(不过这是用户端操作,我们只能在App层面尽量优化)。另外,尽量只在必要的全屏页面隐藏指示器,普通页面保留它更符合Android的设计规范,也能提升用户体验。

内容来源于stack exchange

火山引擎 最新活动