如何解决Android虚拟按键_类似华为的虚拟键

来源:互联网 发布:公司屏蔽了淘宝怎么办 编辑:程序博客网 时间:2024/06/05 05:58

   我们在开发Android 的时候,尤其是适配,是真心觉得Android 头大,①各种状态栏,②小米的悬浮框权限会导致系统级别的WindowManager加载的view 不显示,尤其是Mi 5,Mi 6,③华为的虚拟按键,④魅族手机使用Videovie控件,会在魅族手机底部产黑条 ⑤ 华为手机插入USB 数据线通讯的时候,点击弹窗 是,则导致 不能正常通讯,必须点击否 采用Google 的AOA 协议 才可以避免弹窗提示!

   看看,每个学Android 的人 都是天使,和IOS 那适配比起来,IOS 省了好多 机型适配的问题。

进入正题!

1.状态栏的问题就很好解决,如果为了到达全屏!


首先去掉状态栏

  <activity            android:name="com.gdu.mvp_view.ZorroRealControlActivity"            android:configChanges="orientation|keyboardHidden|screenSize"            android:screenOrientation="landscape"            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />

  <style name="Theme.NoTitleBar.Fullscreen">        <item name="windowFullscreen">true</item>        <item name="windowContentOverlay">@null</item>    </style>

就可以去掉了!


 2.解决下方的虚拟按键NavigationBar

 ①首先判断是否有虚拟按钮

/**     * <P>shang</P>     * <P>判断是否有虚拟按键</P>     * @param context     * @return     */    public static boolean checkDeviceHasNavigationBar(Context context) {        boolean hasNavigationBar = false;        Resources rs = context.getResources();        int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");        if (id > 0) {            hasNavigationBar = rs.getBoolean(id);        }        try {            Class systemPropertiesClass = Class.forName("android.os.SystemProperties");            Method m = systemPropertiesClass.getMethod("get", String.class);            String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");            if ("1".equals(navBarOverride)) {                hasNavigationBar = false;            } else if ("0".equals(navBarOverride)) {                hasNavigationBar = true;            }        } catch (Exception e) {        }        return hasNavigationBar;    }

②就是开始去掉虚拟按键

 @Override    protected void onResume() {            //解决 虚拟按键问题        solveNavigationBar(getWindow());}
   /**     * <P>shang</P>     * <P>解决虚拟按键问题</P>     * @param window     */    public void solveNavigationBar(Window window){                //保持布局状态        int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE|                //布局位于状态栏下方                View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION|                //全屏                View.SYSTEM_UI_FLAG_FULLSCREEN|                //隐藏导航栏                View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;        if (Build.VERSION.SDK_INT>=19){            uiOptions |= 0x00001000;        }else{            uiOptions |= View.SYSTEM_UI_FLAG_LOW_PROFILE;        }        window.getDecorView().setSystemUiVisibility(uiOptions);    }

实测有效!如上图Gif,达到王者荣耀 游戏界面效果!




原创粉丝点击