浏览代码

修复华为荣耀10,安卓9.0等手机首页底部有白边的问题

zengjiebin 7 年之前
父节点
当前提交
30d7690cf3

+ 34 - 4
app/src/main/java/com/sheep/gamegroup/view/activity/ActMain.java

@@ -7,6 +7,7 @@ import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentTransaction;
 import android.support.v4.view.ViewPager;
 import android.text.TextUtils;
+import android.view.MotionEvent;
 import android.view.View;
 import android.widget.FrameLayout;
 import android.widget.LinearLayout;
@@ -41,6 +42,7 @@ import com.sheep.jiuyan.samllsheep.utils.SpUtils;
 import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
 
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
@@ -68,9 +70,38 @@ public class ActMain extends BaseActivity {
             if (game_id != null) {
                 ActionUtil.getInstance().addNextAction(MiddleSchemeAct.SHOW_DIALOG_GAME_OR_GIFT_TASK, game_id);
             }
+        }  //获取顶层视图
+        decorView = getWindow().getDecorView();
+    }
+
+    @Override
+    protected void onStart() {
+        //调用配置
+        init();
+        super.onStart();
+    }
+
+    private void init(){
+        //判断当前版本在4.0以上并且存在虚拟按键,否则不做操作
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && G.checkDeviceHasNavigationBar(this)) {
+            //一定要判断是否存在按键,否则在没有按键的手机调用会影响别的功能。如之前没有考虑到,导致图传全屏变成小屏显示。
+            int flag = 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 // hide
+                    | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
+                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
+            // 获取属性
+            decorView.setSystemUiVisibility(flag);
         }
     }
 
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        return false;
+    }
+    private View decorView;
+
     public static final String FIRST_SHOW_MAIN = "first_show_main";//是否是第一次显示主页
 
     @BindView(R.id.view_pager_container)
@@ -92,10 +123,9 @@ public class ActMain extends BaseActivity {
         EventBus.getDefault().register(this);
         initViewPager();
         initFind();
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            main_layout.setPadding(0, 0, 0, G.getHasVirtualKey(this) - G.getNoHasVirtualKey(this));
-
-        }
+//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && G.checkDeviceHasNavigationBar(this)) {
+//            main_layout.setPadding(0, 0, 0, G.getHasVirtualKey(this) - G.getNoHasVirtualKey(this));
+//        }
 
         CommonUtil.getInstance().initMiDong(this, DataUtil.getInstance().getUserId());
     }

+ 26 - 11
app/src/main/java/com/sheep/jiuyan/samllsheep/utils/G.java

@@ -2,6 +2,7 @@ package com.sheep.jiuyan.samllsheep.utils;
 
 import android.app.Activity;
 import android.content.Context;
+import android.content.res.Resources;
 import android.os.Build;
 import android.os.Environment;
 import android.os.StatFs;
@@ -92,16 +93,6 @@ public class G {
         }
     }
     /**
-     * 获取底部虚拟键盘的高度
-     */
-    public static int getBottomKeyboardHeight(Activity activity){
-        int screenHeight =  G.HEIGHT;
-        DisplayMetrics dm = new DisplayMetrics();
-        activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
-        int heightDifference = screenHeight - dm.heightPixels;
-        return heightDifference;
-    }
-    /**
      * 通过反射,获取包含虚拟键的整体屏幕高度
      *
      * @return
@@ -133,7 +124,31 @@ public class G {
         return height;
     }
 
-
+    /**
+     * 获取是否存在NavigationBar
+     * @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;
+    }