当前位置:   article > 正文

Android 全屏显示、禁用下拉通知消息栏、上拉虚拟按钮栏..._安卓 禁用顶部下滑

安卓 禁用顶部下滑

禁用下拉拉出消息通知栏,禁用上拉拉出虚拟按键栏

一种是直接使用statusBarManager

此例用kotlin来写
方法网上都有,有几个错误点要注意
要引入系统的framework.jar或者在系统源码中编译,不然会编译出错
Unresolved reference: DISABLE_EXPAND

  1. private var statusBarManager: StatusBarManager = context.getSystemService("statusbar") as StatusBarManager
  2.  
  3.  // 禁用
  4.  statusBarManager.disable(StatusBarManager.DISABLE_EXPAND)
  5.  // 还原
  6.  statusBarManager.disable(StatusBarManager.DISABLE_NONE)

要加上权限

  1. <!-- status bar -->
  2. <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>
  3. <uses-permission android:name="android.permission.STATUS_BAR"
  4. tools:ignore="ProtectedPermissions" /> <!--状态栏修改-->

否则会出错

java.lang.SecurityException: StatusBarManagerService: Neither user 10167 nor current process has android.permission.STATUS_BAR.

另一种用反射的方法来做

此例用java来写

  1. /**
  2.  * 用反射实现控制StatusBar状态,需要是system应用
  3.  */
  4. public class StatusBarUtil {
  5.     public static final int STATUS_BAR_DISABLE_HOME = 0x00200000;
  6.     public static final int STATUS_BAR_DISABLE_RECENT = 0x01000000;
  7.     public static final int STATUS_BAR_DISABLE_BACK = 0x00400000;
  8.     public static final int STATUS_BAR_DISABLE_EXPAND = 0x00010000;
  9.     public static final int STATUS_BAR_DISABLE_NONE = 0x00000000;
  10.     public static void setStatusBarState(Context context, int disableFlag) {
  11.         @SuppressLint("WrongConstant") Object service = context.getSystemService("statusbar");
  12.         try {
  13.             Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
  14.             Method disable = statusbarManager.getMethod("disable", int.class);
  15.             disable.invoke(service, disableFlag);
  16.         } catch (Exception e) {
  17.             e.printStackTrace();
  18.         }
  19.     }
  20.     /**
  21.      * 禁用顶部状态栏的下拉及底部虚拟的回退等按键
  22.      */
  23.     public static void disableStatusBar(Context context) {
  24.         // Disable *all* possible navigation via the system bar.
  25.         int state = STATUS_BAR_DISABLE_EXPAND | STATUS_BAR_DISABLE_HOME | STATUS_BAR_DISABLE_RECENT | STATUS_BAR_DISABLE_BACK;
  26.         setStatusBarState(context, state);
  27.     }
  28.     public static void enableStatusBar(Context context) {
  29.         setStatusBarState(context, STATUS_BAR_DISABLE_NONE);
  30.     }
  31. }

全屏显示

单纯地禁用上下拉,不能满屏显示,虚拟键盘显示的地方会是全黑无法显示,还需要额外的操作

  1.     //在Ui中调用此函数,确保满屏隐藏虚拟键盘
  2.     public void makeWindowFullScreen() {
  3.         this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  4.                 WindowManager.LayoutParams.FLAG_FULLSCREEN);
  5.         getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
  6.                 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
  7.                 | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
  8.                 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
  9.                 | View.SYSTEM_UI_FLAG_FULLSCREEN
  10.                 | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
  11.         );
  12.     }


转载于:https://blog.csdn.net/zmlovelx/article/details/125207511

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/791090
推荐阅读
相关标签
  

闽ICP备14008679号