非Root环境下安卓App实现霸屏

1,482 阅读15分钟

​本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1、安卓App实现霸屏思路

非Root环境下安卓实现全屏,屏蔽下方虚拟按键:左键、右键。

注:较新安卓系统无法屏蔽Home键。

全屏后,用户上划之后点击虚拟按键如图所示:

2、代码分为以下三部分

1、隐藏屏幕下方的虚拟按键,并且全屏。

注:这一步只是隐藏按键,不是禁用按键,用户还可以上滑出虚拟按键)

package com.app.fullscreen;

import androidx.appcompat.app.AppCompatActivity;

import android.app.ActivityManager;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        View decorView = getWindow().getDecorView();
// Hide both the navigation bar and the status bar.
// SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
// a general rule, you should design your app to hide the status bar whenever you
// hide the navigation bar.
        int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN|View.SYSTEM_UI_FLAG_IMMERSIVE;
        decorView.setSystemUiVisibility(uiOptions);

        hideBottomUIMenu();
        //onAttachedToWindow();

    }

用户调出下方Android虚拟按键后,分别屏蔽。

2、禁止左边应用列表按键。

    @Override
    protected void onUserLeaveHint() {
        super.onUserLeaveHint();

        Toast.makeText(MainActivity.this, "onUserLeaveHint", Toast.LENGTH_SHORT).show();
        ((ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE)).moveTaskToFront(getTaskId(), 0);
    }

3、禁止右边回退按键。

    /*
    *  3.禁止右边回退按键
    * */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Toast.makeText(MainActivity.this, "已屏蔽返回键", Toast.LENGTH_SHORT).show();
            return true;
        }

        if (keyCode == KeyEvent.KEYCODE_HOME) {
            Toast.makeText(MainActivity.this, "不能回到主屏幕", Toast.LENGTH_SHORT).show();
            return true;
        }


       // return true;
        return super.onKeyDown(keyCode, event);
    }