1. 程式人生 > >如何解決Android虛擬按鍵_類似華為的虛擬鍵

如何解決Android虛擬按鍵_類似華為的虛擬鍵

   我們在開發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,達到王者榮耀 遊戲介面效果!