Selaa lähdekoodia

[공통][New] 하단 네비 바 높이 계산 방식 변경
- 일부 기기에서 ResourceUtil.getNavBarHeight() 가 작동하지 않는다.
- 레이아웃의 크기로 계산하여 높이를 저장

hyodong.min 6 vuotta sitten
vanhempi
commit
ff00f263ae

+ 2 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/activity/ActivityBase.java

@@ -105,9 +105,10 @@ public abstract class ActivityBase extends AppCompatActivity implements IHelperP
       }
 
       //resize screen in full screen
-      FullScreenWithKeyBoardLayout.assistActivity(this, () -> {
+      FullScreenWithKeyBoardLayout.assistActivity(this, (layout, height, navBarHeight) -> {
         // 화면 사이즈 변경되면 실행됨
         getHelper(ScreenSizeHelper.class).init(getApplicationContext());
+        ScreenUtil.setNavBarHeight(navBarHeight);
       });
 
       // 풀 스크린 아닌 버전은 상단에 스테이터스 바 높이의 패딩을 추가함

+ 1 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/activity/SplashActivity.java

@@ -3,8 +3,6 @@ package kr.co.zumo.app.lifeplus.activity;
 import android.content.Intent;
 import android.widget.FrameLayout;
 
-import com.buzzvil.buzzad.analytics.BATracker;
-
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.application.App;
 import kr.co.zumo.app.lifeplus.helper.ScreenChangerHelper;
@@ -34,7 +32,7 @@ public class SplashActivity extends ActivityBase {
 
     setContentView(R.layout.activity_splash);
 
-    FullScreenWithKeyBoardLayout.assistActivity(this, () -> {});
+    FullScreenWithKeyBoardLayout.assistActivity(this, (layout, height, navBarHeight) -> {});
 
     SuperModelInit.instant(App.getInstance().getContext());
 

+ 20 - 23
app/src/main/java/kr/co/zumo/app/lifeplus/util/ResourceUtil.java

@@ -13,11 +13,7 @@ import android.support.annotation.DrawableRes;
 import android.support.annotation.IdRes;
 import android.support.annotation.StringRes;
 import android.support.v4.content.ContextCompat;
-import android.util.DisplayMetrics;
-import android.util.Log;
 import android.util.TypedValue;
-import android.view.Display;
-import android.view.WindowManager;
 
 import kr.co.zumo.app.lifeplus.application.App;
 
@@ -203,25 +199,26 @@ public class ResourceUtil {
    * @return
    */
   public static int getNavBarHeight() {
+    return ScreenUtil.getNavBarHeight();
     // getRealMetrics is only available with API 17 and +
-    WindowManager wm = (WindowManager) App.getInstance().getContext().getSystemService(Context.WINDOW_SERVICE);
-    if (wm != null) {
-      Display display = wm.getDefaultDisplay();
-      DisplayMetrics metrics = new DisplayMetrics();
-      display.getMetrics(metrics);
-      int usableHeight = metrics.heightPixels;
-      display.getRealMetrics(metrics);
-      int realHeight = metrics.heightPixels;
-      Log.w("APP# ResourceUtil | getNavBarHeight", "|" + "usableHeight: " + usableHeight + ", realHeight: " + realHeight);
-      if (realHeight > usableHeight) {
-        return realHeight - usableHeight;
-      }
-      else {
-        return 0;
-      }
-    }
-    else {
-      return 0;
-    }
+//    WindowManager wm = (WindowManager) App.getInstance().getContext().getSystemService(Context.WINDOW_SERVICE);
+//    if (wm != null) {
+//      Display display = wm.getDefaultDisplay();
+//      DisplayMetrics metrics = new DisplayMetrics();
+//      display.getMetrics(metrics);
+//      int usableHeight = metrics.heightPixels;
+//      display.getRealMetrics(metrics);
+//      int realHeight = metrics.heightPixels;
+//      Log.w("APP# ResourceUtil | getNavBarHeight", "|" + "usableHeight: " + usableHeight + ", realHeight: " + realHeight);
+//      if (realHeight > usableHeight) {
+//        return realHeight - usableHeight;
+//      }
+//      else {
+//        return 0;
+//      }
+//    }
+//    else {
+//      return 0;
+//    }
   }
 }

+ 20 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/util/ScreenUtil.java

@@ -14,6 +14,8 @@ import android.view.View;
  */
 public class ScreenUtil {
 
+  private static int navBarHeight = 0;
+
   /**
    * 상단 스테이터스바 높이만큼 패딩 추가
    *
@@ -23,7 +25,6 @@ public class ScreenUtil {
     view.setPadding(view.getPaddingStart(), view.getPaddingTop() + ResourceUtil.getStatusBarHeightManual(), view.getPaddingEnd(), view.getPaddingBottom());
   }
 
-
   /**
    * 하단 내비게이션 높이만큼 패딩추가
    *
@@ -33,4 +34,22 @@ public class ScreenUtil {
     view.setPadding(view.getPaddingStart(), view.getPaddingTop(), view.getPaddingEnd(), view.getPaddingBottom() + ResourceUtil.getNavBarHeight());
   }
 
+  /**
+   * 네비게이션 바 높이 저장
+   *
+   * @param height
+   */
+  public static void setNavBarHeight(int height) {
+    navBarHeight = height;
+  }
+
+  /**
+   * 네비바 높이 반환
+   *
+   * @return
+   */
+  public static int getNavBarHeight() {
+    return navBarHeight;
+  }
+
 }

+ 15 - 5
app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/FullScreenWithKeyBoardLayout.java

@@ -22,7 +22,7 @@ import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 public class FullScreenWithKeyBoardLayout {
 
 
-  public static void assistActivity(Activity activity, Runnable listener) {
+  public static void assistActivity(Activity activity, Listener listener) {
     new FullScreenWithKeyBoardLayout(activity, listener);
   }
 
@@ -31,9 +31,10 @@ public class FullScreenWithKeyBoardLayout {
   private int usableHeightPrevious;
   private FrameLayout.LayoutParams frameLayoutParams;
   private int statusBarHeight = ResourceUtil.getStatusBarHeight();
-  private Runnable listener;
+  private Listener listener;
+  private int navBarHeight;
 
-  private FullScreenWithKeyBoardLayout(Activity activity, Runnable listener) {
+  private FullScreenWithKeyBoardLayout(Activity activity, Listener listener) {
     this.listener = listener;
     isFullScreenVersion = AppUtil.isFullScreenVersion();
 
@@ -76,10 +77,12 @@ public class FullScreenWithKeyBoardLayout {
             h = h + statusBarHeight;
           }
 
+          // 네비 바 높이 저장
+          navBarHeight = usableHeightSansKeyboard - h;
+
           frameLayoutParams.height = h;
         }
-        Log.d("APP# FullScreenWithKeyBoardLayout | possiblyResizeChildOfContent", "|" + " h: " + frameLayoutParams.height);
-        listener.run();
+        listener.onScreenResize(this, frameLayoutParams.height, navBarHeight);
         childContent.requestLayout();
       }
       usableHeightPrevious = usableHeightNow;
@@ -96,4 +99,11 @@ public class FullScreenWithKeyBoardLayout {
     childContent.getWindowVisibleDisplayFrame(r);
     return (r.bottom - r.top);
   }
+
+  /***********************************
+   * listener
+   ***********************************/
+  public interface Listener {
+    void onScreenResize(FullScreenWithKeyBoardLayout layout, int height, int navBarHeight);
+  }
 }