Android 隐藏底部虚拟键

更新 新发现:android 4.4.4  直接(底部导航栏隐藏,切屏蔽了上划出现的问题)

      getWindow().getDecorView().setSystemUiVisibility(4108);

但是在弹出软键盘或者拉下状态栏是还会出现

      所以加了一个方法 禁止状态栏被点击(特殊需求才用到)

 CustomViewGroup view;
    WindowManager manager;
    public void prohibitDropDown() {
        manager = ((WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE));
        WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams();
        localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
        localLayoutParams.gravity = Gravity.TOP;
        localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
                // this is to enable the notification to recieve touch events
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
                // Draws over status bar
                WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
        localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
        localLayoutParams.height = (int) (50 * getResources()
                .getDisplayMetrics().scaledDensity);
        localLayoutParams.format = PixelFormat.TRANSPARENT;
        view = new CustomViewGroup(this);
        manager.addView(view, localLayoutParams);
    }

    /**
     * 允许下拉状态栏点击选项
     */
    public void allowDropDown(){
        manager.removeView(view);
    }

    public class CustomViewGroup extends ViewGroup {

        public CustomViewGroup(Context context) {
            super(context);
        }

        @Override
        protected void onLayout(boolean b, int i, int i1, int i2, int i3) {

        }

        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            return true;
        }
    }

    //系统ui变化监听(一般都是状态栏和导航栏)
    @Override
    public void onWindowFocusChanged(boolean hasFocus)
    {
        super.onWindowFocusChanged(hasFocus);

//        getWindow().getDecorView().setSystemUiVisibility(options);
    }

 

方法一  滑动屏幕 可重新显示出来

protected void hideBottomUIMenu() {
    //隐藏虚拟按键,并且全屏
    if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
        View v = this.getWindow().getDecorView();
        v.setSystemUiVisibility(View.GONE);
    } else if (Build.VERSION.SDK_INT >= 19) {
        //for new api versions.
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(uiOptions);

    }
}

 

方法二  滑动也不能重新显示

protected void hideBottomUIMenu() {
    //隐藏虚拟按键,并且全屏
    if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
        View v = this.getWindow().getDecorView();
        v.setSystemUiVisibility(View.GONE);
    } else if (Build.VERSION.SDK_INT >= 19) {
       
        Window _window = getWindow();
        WindowManager.LayoutParams params = _window.getAttributes();
        params.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_IMMERSIVE;
        _window.setAttributes(params);
    }
}

方法三  亲测好用(监听系统UI变化实现)

protected void hideBottomUIMenu() {//隐藏底部导航栏
final  View decorView = getWindow().getDecorView();
final int  uiOption = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        |View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        |View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        |View.SYSTEM_UI_FLAG_IMMERSIVE
        |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;

decorView.setSystemUiVisibility(uiOption);

// This code will always hide the navigation bar
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener(){
    @Override
    public void  onSystemUiVisibilityChange(int visibility)
    {
        if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
        {
            decorView.setSystemUiVisibility(uiOption);
        }
    }
});

}

//系统ui变化监听(一般都是状态栏和导航栏)
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
    super.onWindowFocusChanged(hasFocus);

    getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    |View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    |View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    |View.SYSTEM_UI_FLAG_IMMERSIVE
                    |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

(如有发现问题,可以留言,私聊探讨。)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要彻底隐藏Android设备上的底部虚拟按键,您可以尝试以下两种方法: 方法一:使用全屏模式 通过使用全屏模式,您可以完全隐藏底部虚拟按键。以下是实现此目的的步骤: 1. 在您的Android应用程序中,打开您想要隐藏底部虚拟按键的活动。 2. 在该活动的onCreate()方法中添加以下代码: ```java View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); ``` 这将隐藏底部导航栏和状态栏。 3. 在该活动的onResume()方法中添加以下代码: ```java View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); ``` 这将确保当用户返回到该活动时,底部导航栏和状态栏仍然被隐藏。 方法二:使用系统UI调节器 使用系统UI调节器,您可以在整个Android设备上隐藏底部虚拟按键。以下是实现此目的的步骤: 1. 打开您的Android设备上的设置应用程序。 2. 寻找“开发者选项”并打开它。 3. 滚动到“绘画”部分,并找到“禁用虚拟按键”选项。启用此选项。 4. 按下设备上的电源,然后再按下“禁用虚拟按键”选项。此时,底部导航栏将被隐藏。 请注意,使用该选项可能会导致一些应用程序无法正常工作。如果您遇到任何问题,请在开发者选项中禁用此选项。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值