浏览代码

[공통][Bug] 액션바 스크롤 실행 시 activity resize 되지 않던 문제 수정

hyodong.min 7 年之前
父节点
当前提交
36821ffbaa

+ 2 - 12
app/src/main/java/kr/co/zumo/app/lifeplus/activity/MainActivity.java

@@ -5,10 +5,8 @@ package kr.co.zumo.app.lifeplus.activity;
 
 import android.os.Bundle;
 import android.support.annotation.CallSuper;
-import android.support.design.widget.CoordinatorLayout;
 import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
-import android.view.ViewGroup;
 
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.manager.ActionBarManager;
@@ -16,7 +14,6 @@ import kr.co.zumo.app.lifeplus.supervisor.DialogHelper;
 import kr.co.zumo.app.lifeplus.supervisor.FragmentChanger;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenChanger;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenChangerHelper;
-import kr.co.zumo.app.lifeplus.view.CustomScrollingViewBehavior;
 import kr.co.zumo.app.lifeplus.view.fragment.FragmentBase;
 import kr.co.zumo.app.lifeplus.view.fragment.factory.BasicFragmentFactory;
 import kr.co.zumo.app.lifeplus.view.fragment.factory.FragmentFactory;
@@ -49,7 +46,7 @@ public class MainActivity extends AppCompatActivity {
 
     // actionbar
     setSupportActionBar(findViewById(R.id.toolbar));
-    ActionBarManager.getInstance().init(this, this.getSupportActionBar(), findViewById(R.id.layout_app_bar));
+    ActionBarManager.getInstance().init(this, this.getSupportActionBar(), findViewById(R.id.layout_app_bar), findViewById(R.id.container_main));
 
     ScreenChangerHelper.getInstance().setAppCompatActivity(this);
     ScreenChangerHelper.getInstance().setContainerId(R.id.container_main);
@@ -59,15 +56,8 @@ public class MainActivity extends AppCompatActivity {
     ScreenChangerHelper helper = ScreenChangerHelper.getInstance();
     ScreenChanger screenChanger = new FragmentChanger(helper.getAppCompatActivity(), helper.getContainerId(), factory);
 
-    // custom appbar scroll behavior
-    ViewGroup container = findViewById(R.id.container_main);
-    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) container.getLayoutParams();
-//    params.setBehavior(new AppBarLayout.ScrollingViewBehavior());
-    params.setBehavior(new CustomScrollingViewBehavior());
-    container.setLayoutParams(params);
-
     // ScreenStarter 에서 설정된 프래그먼트를 선택한다.
-    int fragmentFlag = getIntent().getIntExtra(ScreenStarter.FLAG_FRAGMENT, 0);
+    int fragmentFlag = getIntent().getIntExtra(ScreenStarter.FLAG_FRAGMENT, ScreenStarter.START_FROM_MAIN);
     int screenId = new ScreenIDMapper().getScreenId(fragmentFlag);
     screenChanger.changeTo(screenId);
 

+ 18 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/manager/ActionBarManager.java

@@ -9,10 +9,13 @@ import android.support.v7.widget.Toolbar;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
 import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.util.ResourceUtil;
+import kr.co.zumo.app.lifeplus.view.CustomScrollingViewBehavior;
 
 /**
  * Fragment의 ActionBar 관리
@@ -34,6 +37,7 @@ public class ActionBarManager implements IActionBarListener {
 
   private ActionBar actionBar;
   private AppBarLayout appBarLayout;
+  private ViewGroup container;
   private Toolbar toolbar;
   private TextView actionBarTitle;
   private View imageBi;
@@ -63,9 +67,10 @@ public class ActionBarManager implements IActionBarListener {
    *
    * @param actionBar
    */
-  public void init(Activity activity, ActionBar actionBar, AppBarLayout appBarLayout) {
+  public void init(Activity activity, ActionBar actionBar, AppBarLayout appBarLayout, ViewGroup container) {
     this.actionBar = actionBar;
     this.appBarLayout = appBarLayout;
+    this.container = container;
 
 //    disableShowHideAnimation(actionBar);
 
@@ -175,17 +180,29 @@ public class ActionBarManager implements IActionBarListener {
    * @param isEnabled
    */
   private void setScrollable(boolean isEnabled) {
+    // custom appbar scroll behavior
+    CoordinatorLayout.LayoutParams containerLayoutParams = (CoordinatorLayout.LayoutParams) container.getLayoutParams();
     AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
     CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
     if (isEnabled) {
       params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL);
       appBarLayoutParams.setBehavior(new AppBarLayout.Behavior());
       appBarLayout.setLayoutParams(appBarLayoutParams);
+
+//      containerLayoutParams.setBehavior(new AppBarLayout.ScrollingViewBehavior());
+      containerLayoutParams.topMargin = 0;
+      containerLayoutParams.setBehavior(new CustomScrollingViewBehavior());
+      container.setLayoutParams(containerLayoutParams);
     }
     else {
       params.setScrollFlags(0);
       appBarLayoutParams.setBehavior(null);
       appBarLayout.setLayoutParams(appBarLayoutParams);
+
+      containerLayoutParams.setBehavior(null);
+      containerLayoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
+      containerLayoutParams.topMargin = ResourceUtil.getDimension(R.dimen.action_bar_height);
+      container.setLayoutParams(containerLayoutParams);
     }
   }
 

+ 29 - 15
app/src/main/java/kr/co/zumo/app/lifeplus/view/CustomScrollingViewBehavior.java

@@ -3,7 +3,6 @@
  */
 package kr.co.zumo.app.lifeplus.view;
 
-import android.support.annotation.NonNull;
 import android.support.design.widget.AppBarLayout;
 import android.support.design.widget.CoordinatorLayout;
 import android.support.v4.view.ViewCompat;
@@ -29,8 +28,9 @@ public class CustomScrollingViewBehavior extends AppBarLayout.ScrollingViewBehav
   public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
 
     super.onDependentViewChanged(parent, child, dependency);
+    final int height = parent.getHeight() - dependency.getBottom();
 
-    child.getLayoutParams().height = parent.getHeight() - dependency.getBottom();
+    child.getLayoutParams().height = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY);
     child.requestLayout();
 
     return false;
@@ -94,6 +94,12 @@ public class CustomScrollingViewBehavior extends AppBarLayout.ScrollingViewBehav
     return false;
   }
 
+  @Override
+  public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
+    // We depend on any AppBarLayouts
+    return dependency instanceof AppBarLayout;
+  }
+
   AppBarLayout findFirstDependency(List<View> views) {
     for (int i = 0, z = views.size(); i < z; i++) {
       View view = views.get(i);
@@ -104,18 +110,26 @@ public class CustomScrollingViewBehavior extends AppBarLayout.ScrollingViewBehav
     return null;
   }
 
-  @Override
-  public void onNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull View child, @NonNull View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {
-    super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type);
-
-//    Log.w("APP# CustomScrollingViewBehavior | onNestedScroll", "|" + " child: " + child);
-  }
-
-  @Override
-  public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull View child, @NonNull View directTargetChild, @NonNull View target, int axes, int type) {
-//    Log.w("APP# CustomScrollingViewBehavior | onStartNestedScroll", "| axes: " + axes + "type: " + type);
-//    Log.w("APP# CustomScrollingViewBehavior | onStartNestedScroll", "|" + "-------------------------------------------------------");
-    return super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, axes, type);
-  }
+//  @Override
+//  public void onNestedPreScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull View child, @NonNull View target, int dx, int dy, @NonNull int[] consumed, int type) {
+//    Log.i("APP# CustomScrollingViewBehavior | onNestedPreScroll", "|" + " dx: " + dx + ", dy: " + dy + ", consumed: " + consumed);
+//    Log.i("APP# CustomScrollingViewBehavior | onNestedPreScroll", "|" + "child: " + child + "\n target: " + target);
+//    consumed[0] = dx;
+//    consumed[1] = dy;
+//  }
+//
+//  @Override
+//  public void onNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull View child, @NonNull View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {
+//    super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type);
+//
+////    Log.w("APP# CustomScrollingViewBehavior | onNestedScroll", "|" + " child: " + child);
+//  }
+//
+//  @Override
+//  public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull View child, @NonNull View directTargetChild, @NonNull View target, int axes, int type) {
+////    Log.w("APP# CustomScrollingViewBehavior | onStartNestedScroll", "| axes: " + axes + "type: " + type);
+////    Log.w("APP# CustomScrollingViewBehavior | onStartNestedScroll", "|" + "-------------------------------------------------------");
+//    return true;
+//  }
 
 }

+ 1 - 1
app/src/main/res/layout/action_bar.xml

@@ -13,7 +13,7 @@
 
   <LinearLayout
     android:layout_width="match_parent"
-    android:layout_height="58dp"
+    android:layout_height="@dimen/action_bar_height"
     android:layout_gravity="center_vertical"
     android:gravity="center_vertical"
     android:paddingStart="14dp"

+ 3 - 2
app/src/main/res/layout/activity_main.xml

@@ -8,13 +8,14 @@
   android:background="@color/CFFFFFF"
   android:orientation="vertical">
 
-  <FrameLayout
+  <android.support.constraint.ConstraintLayout
     android:id="@+id/container_main"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@color/CFFFFFF"
     android:orientation="vertical"
-    />
+    >
+  </android.support.constraint.ConstraintLayout>
   <!--app:layout_behavior="@string/appbar_scrolling_view_behavior"-->
 
   <android.support.design.widget.AppBarLayout

+ 1 - 1
app/src/main/res/values/dimens.xml

@@ -3,7 +3,7 @@
   <dimen name="activity_horizontal_margin">16dp</dimen>
   <dimen name="activity_vertical_margin">16dp</dimen>
   <dimen name="fab_margin">16dp</dimen>
-  <dimen name="action_bar_height">62dp</dimen>
+  <dimen name="action_bar_height">58dp</dimen>
   <dimen name="main_contents_weather_marget_top">38dp</dimen>  <!--38dp-->
   <dimen name="main_contents_start_gap">57dp</dimen>
   <dimen name="main_contents_image_width">285dp</dimen>