在开发过程中,有时候可能需要防呆的功能,防止用户在使用过程中误点返回键,HOME键,下拉框等之类的。接下来我们需要屏蔽这些按键,先看看代码:
/** * 隐藏虚拟键 */ public static void hideNavigation(Activity context) { if ((Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB)) { Logger.get().d("myth hideNavigation " + context.getClass().getSimpleName()); context.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE); } } /** * 隐藏虚拟键 */ public static void hideNavigation(View view) { if ((Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB)) { Logger.get().d("myth hideNavigation " + view.getClass().getSimpleName()); // | View.SYSTEM_UI_FLAG_FULLSCREEN view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE); } } /** * 显示虚拟键 */ public static void showNavigation(View view) { if ((Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB)) { Logger.get().d("myth hideNavigation " + view.getClass().getSimpleName()); view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); }上面代码或许是一种方式,但是这种方式不是很稳定,很容易就自己又显示出来了,之后又找到一种实现方式,代码如下,亲测没问题:
/** * hide Navigation */ public static void hideNavigation(Activity context) { statusBarManager = (StatusBarManager) context.getSystemService("statusbar"); int flag = StatusBarManager.DISABLE_HOME | StatusBarManager.DISABLE_BACK | StatusBarManager.DISABLE_SEARCH | StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_EXPAND; statusBarManager.disable(flag); } public static void showNavigation(){ if (statusBarManager != null) statusBarManager.disable(StatusBarManager.DISABLE_NONE); }StatusBarManager这个类估计是找不到,如果用Android源码编译,可以import包就ok:
import android.app,StatusBarManager;如果不是android 源码编译,那可以使用反射的机制完成这个功能,代码如下:
private void disableStatusBars() { Object service = getSystemService("statusbar"); try { Class<?> statusBarManager = Class.forName ("android.app.StatusBarManager"); Method expand = statusBarManager.getMethod("disable", int.class); expand.invoke(service, 0x00010000); } catch (Exception e) { e.printStackTrace(); } }差不多就这样讲完了,不知道对你是否有帮助,有错误的地方希望能指出来,大家共同学习!