Android-Framework 去掉底部导航栏 ,默认手势导航,去掉手势导航的底部横线

一、环境

高通865 Android 10

二、相关代码位置和实现

1、隐藏导航栏

device/mediatek/system/common/system.prop

-qemu.hw.mainkeys=0

+qemu.hw.mainkeys=1

0就是开启,1就是关闭

注:frameworks/base/core/res/res/values/dimens.xml中 navigation_bar_height和navigation_bar_height_landscape都改成0dp也可以实现,只是布局看不出来了,如果换个布局还是有的!不推荐!!

原理是在frameworks下调用这个宏的值做的逻辑执行

frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java

String navBarOverride = SystemProperties.get("qemu.hw.mainkeys");
 
            if ("1".equals(navBarOverride)) {
 
                mHasNavigationBar = false;
 
            } else if ("0".equals(navBarOverride)) {

2、默认手势导航

 frameworks/base/core/res/res/values/config.xml下改配置

<!-- Controls the navigation bar interaction mode:
         0: 3 button mode (back, home, overview buttons)
         1: 2 button mode (back, home buttons + swipe up for overview)
         2: gestures only for back, home and overview -->
 
    <integer name="config_navBarInteractionMode">2</integer>

3、删除关于底部三个按键的包

在frameworks//base/packages/overlays/Android.mk中

LOCAL_REQUIRED_MODULES里面删掉NavigationBarMode3ButtonOverlay \

不让编译就行

原理是在packages/apps/Settings/src/com/android/settings/gestures/SystemNavigationGestureSettings.java是根据这个包名来添加的

 if (SystemNavigationPreferenceController.isOverlayPackageAvailable(c,

                NAV_BAR_MODE_3BUTTON_OVERLAY)) {

            candidates.add(new CandidateInfoExtra(

                    c.getText(R.string.legacy_navigation_title),

                    c.getText(R.string.legacy_navigation_summary),

                    KEY_SYSTEM_NAV_3BUTTONS, true /* enabled */));

        }

4、去除底部横线

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java

在updateNavButtonIcons方法里有
getHomeHandle().setVisibility(disableHomeHandle ? View.INVISIBLE : View.VISIBLE);
这个就是底部横线的布局,直接让他不显示就行,两个都是INVISIBLE




那三个虚拟按键

getBackButton().setVisibility(disableBack ? View.INVISIBLE : View.VISIBLE);
 
getHomeButton().setVisibility(disableHome ? View.INVISIBLE : View.VISIBLE);
 
getRecentsButton().setVisibility(disableRecent ? View.INVISIBLE : View.VISIBLE);

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android Framework中,底部导航栏通常位于屏幕底部,用于导航应用程序的主要功能。要修改底部导航栏的位置,可以考虑以下方法: 1. 使用RelativeLayout布局:可以将底部导航栏放置在屏幕底部,通过设置`android:layout_alignParentBottom="true"`属性来实现。这样可以确保底部导航栏始终位于屏幕底部。 2. 使用CoordinatorLayout布局:CoordinatorLayout是一个适用于复杂交互的布局,可以方便地控制子视图的位置。可以在CoordinatorLayout中嵌套一个AppBarLayout,并在AppBarLayout内部添加底部导航栏视图。通过设置`app:layout_anchorGravity="bottom"`属性,可以将底部导航栏与布局的底部对齐。 3. 修改系统样式:通过修改系统的主题样式,可以全局改变底部导航栏的位置。可以创建一个新的主题,并在样式中设置`<item name="android:navigationBarPosition">floating</item>`属性来修改底部导航栏的位置。根据具体需求,可以将其设置为"floating"、"landscape"或者"split",以实现不同的位置布局。 4. 自定义布局:如果以上方法无法满足需求,可以考虑自定义底部导航栏的布局。通过创建一个包含底部导航栏的自定义布局文件,并在Activity中引用该布局文件,可以实现完全自定义的底部导航栏位置。 需要注意的是,这些方法可能需要对代码进行一些修改,并且在不同版本的Android系统上可能会有兼容性问题。应根据具体的项目需求和目标设备进行适当的调整和测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

粤M温同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值