Browse Source

[공통][New] Toolbar 스크롤 작업 중
- Toolbar 가 차지하는 자리만큼 (스크롤로 쓰여질) 메인 화면 영역이 밖으로 밀려나, 스크롤이 필요치 않은 화면은 아래 부분이 잘린다.
- 1. 잘리는 만큼 빈칸을 추가해주거나,
- 2. 스크롤 여부를 결정해준다.

hyodong.min 7 năm trước cách đây
mục cha
commit
4ddeceadfe

+ 5 - 7
app/src/main/java/kr/co/zumo/app/lifeplus/activity/MainActivity.java

@@ -5,11 +5,9 @@ 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.support.v7.widget.RecyclerView;
 import android.util.Log;
-import android.view.ViewGroup;
 
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.manager.ActionBarManager;
@@ -53,7 +51,7 @@ public class MainActivity extends AppCompatActivity {
     DialogHelper.getInstance().setFragmentManager(getSupportFragmentManager());
 
     // actionbar
-    setSupportActionBar(findViewById(R.id.toolbar));
+//    setSupportActionBar(findViewById(R.id.toolbar));
     ActionBarManager.getInstance().init(this, this.getSupportActionBar());
 
     ScreenChangerHelper.getInstance().setAppCompatActivity(this);
@@ -65,10 +63,10 @@ public class MainActivity extends AppCompatActivity {
     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 CustomScrollingViewBehavior());
-    container.setLayoutParams(params);
+//    ViewGroup container = findViewById(R.id.container_main);
+//    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) container.getLayoutParams();
+//    params.setBehavior(new CustomScrollingViewBehavior());
+//    container.setLayoutParams(params);
 
     // ScreenStarter 에서 설정된 프래그먼트를 선택한다.
     int fragmentFlag = getIntent().getIntExtra(ScreenStarter.FLAG_FRAGMENT, 0);

+ 40 - 5
app/src/main/java/kr/co/zumo/app/lifeplus/manager/ActionBarManager.java

@@ -2,8 +2,10 @@ package kr.co.zumo.app.lifeplus.manager;
 
 import android.app.Activity;
 import android.support.annotation.StringRes;
+import android.support.design.widget.AppBarLayout;
 import android.support.v7.app.ActionBar;
 import android.support.v7.widget.Toolbar;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.ProgressBar;
@@ -30,6 +32,7 @@ public class ActionBarManager implements IActionBarListener {
   }
 
   private ActionBar actionBar;
+  private Toolbar toolbar;
   private TextView actionBarTitle;
   private View imageBi;
   private View buttonBack;
@@ -59,6 +62,8 @@ public class ActionBarManager implements IActionBarListener {
   public void init(Activity activity, ActionBar actionBar) {
     this.actionBar = actionBar;
 
+//    disableShowHideAnimation(actionBar);
+
     LayoutInflater inflater = LayoutInflater.from(activity);
     View view = inflater.inflate(R.layout.action_bar, null);
 
@@ -108,7 +113,6 @@ public class ActionBarManager implements IActionBarListener {
     }
   }
 
-
   /**
    * actionbar 제목 설정
    *
@@ -122,14 +126,22 @@ public class ActionBarManager implements IActionBarListener {
    * actionbar hide
    */
   public void hide() {
+    Log.i("APP# ActionBarManager | hide", "|" + "~~~~~~~~~~~~~~~~~~~~~~`");
     actionBar.hide();
+    if (toolbar.getParent() instanceof AppBarLayout) {
+      ((AppBarLayout) toolbar.getParent()).setExpanded(false, false);
+    }
   }
 
   /**
    * show
    */
   public void show() {
+    Log.i("APP# ActionBarManager | show", "|" + "~~~~~~~~~~~~~~~~~~~~~~`");
     actionBar.show();
+    if (toolbar.getParent() instanceof AppBarLayout) {
+      ((AppBarLayout) toolbar.getParent()).setExpanded(true, false);
+    }
   }
 
   /**
@@ -146,10 +158,10 @@ public class ActionBarManager implements IActionBarListener {
     actionBar.setDisplayShowHomeEnabled(false);      //홈 아이콘을 숨김처리합니다.
     actionBar.setCustomView(view);
 
-    Toolbar parent = (Toolbar) view.getParent();
-    parent.setPadding(0, 0, 0, 0);//for tab otherwise give space in tab
-    parent.setContentInsetsAbsolute(0, 0);
-//    parent.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
+    toolbar = (Toolbar) view.getParent();
+    toolbar.setPadding(0, 0, 0, 0);//for tab otherwise give space in tab
+    toolbar.setContentInsetsAbsolute(0, 0);
+//    toolbar.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
 
     setDisplayOptions(android.app.ActionBar.DISPLAY_SHOW_CUSTOM);
     setElevation(0);
@@ -167,6 +179,29 @@ public class ActionBarManager implements IActionBarListener {
     }
   }
 
+//  private void disableShowHideAnimation(ActionBar actionBar) {
+//    try
+//    {
+//      actionBar.getClass().getDeclaredMethod("setShowHideAnimationEnabled", boolean.class).invoke(actionBar, false);
+//    }
+//    catch (Exception exception)
+//    {
+//      try {
+//        Field mActionBarField = actionBar.getClass().getSuperclass().getDeclaredField("mActionBar");
+//        mActionBarField.setAccessible(true);
+//        Object icsActionBar = mActionBarField.get(actionBar);
+//        Field mShowHideAnimationEnabledField = icsActionBar.getClass().getDeclaredField("mShowHideAnimationEnabled");
+//        mShowHideAnimationEnabledField.setAccessible(true);
+//        mShowHideAnimationEnabledField.set(icsActionBar,false);
+//        Field mCurrentShowAnimField = icsActionBar.getClass().getDeclaredField("mCurrentShowAnim");
+//        mCurrentShowAnimField.setAccessible(true);
+//        mCurrentShowAnimField.set(icsActionBar,null);
+//      }catch (Exception e){
+//        //....
+//      }
+//    }
+//  }
+
   /**
    * progress bar 보이기/안보이기
    *

+ 50 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/fragment/main/ScrollingActionBarBehavior.java

@@ -0,0 +1,50 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.fragment.main;
+
+import android.content.Context;
+import android.support.design.widget.AppBarLayout;
+import android.support.design.widget.CoordinatorLayout;
+import android.support.v7.widget.Toolbar;
+import android.util.AttributeSet;
+import android.view.View;
+
+/**
+ * ScrollingActionBarBehavior
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 10. 16.]   [최초 작성]
+ * @since 2018. 10. 16.
+ */
+public class ScrollingActionBarBehavior extends CoordinatorLayout.Behavior<Toolbar> {
+  private int toolbarHeight;
+
+
+  public ScrollingActionBarBehavior(Context context, AttributeSet attrs) {
+
+    super(context, attrs);
+    this.toolbarHeight = 100;
+  }
+
+  @Override
+  public boolean layoutDependsOn(CoordinatorLayout parent, Toolbar fab, View dependency) {
+    return dependency instanceof AppBarLayout;
+  }
+
+
+  @Override
+  public boolean onDependentViewChanged(CoordinatorLayout parent, Toolbar fab, View dependency) {
+    if (dependency instanceof AppBarLayout) {
+      CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
+      int fabBottomMargin = lp.bottomMargin;
+      int distanceToScroll = fab.getHeight() + fabBottomMargin;
+      float ratio = (float) dependency.getY() / (float) toolbarHeight;
+      fab.setTranslationY(-distanceToScroll * ratio);
+    }
+    return true;
+  }
+}

+ 39 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/fragment/main/ScrollingBlankBehavior.java

@@ -0,0 +1,39 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.fragment.main;
+
+import android.content.Context;
+import android.support.design.widget.CoordinatorLayout;
+import android.support.v7.widget.Toolbar;
+import android.util.AttributeSet;
+import android.view.View;
+
+/**
+ * ScrollingActionBarBehavior
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 10. 16.]   [최초 작성]
+ * @since 2018. 10. 16.
+ */
+public class ScrollingBlankBehavior extends CoordinatorLayout.Behavior<Toolbar> {
+
+  public ScrollingBlankBehavior(Context context, AttributeSet attrs) {
+
+    super(context, attrs);
+  }
+
+  @Override
+  public boolean layoutDependsOn(CoordinatorLayout parent, Toolbar fab, View dependency) {
+    return false;
+  }
+
+
+  @Override
+  public boolean onDependentViewChanged(CoordinatorLayout parent, Toolbar fab, View dependency) {
+    return true;
+  }
+}

+ 50 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/fragment/main/ScrollingFloatingActionButtonBehavior.java

@@ -0,0 +1,50 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.fragment.main;
+
+import android.content.Context;
+import android.support.design.widget.AppBarLayout;
+import android.support.design.widget.CoordinatorLayout;
+import android.support.design.widget.FloatingActionButton;
+import android.util.AttributeSet;
+import android.view.View;
+
+/**
+ * ScrollingFloatingActionButtonBehavior
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 10. 16.]   [최초 작성]
+ * @since 2018. 10. 16.
+ */
+public class ScrollingFloatingActionButtonBehavior extends CoordinatorLayout.Behavior<FloatingActionButton> {
+  private int toolbarHeight;
+
+
+  public ScrollingFloatingActionButtonBehavior(Context context, AttributeSet attrs) {
+
+    super(context, attrs);
+    this.toolbarHeight = 100;
+  }
+
+  @Override
+  public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton fab, View dependency) {
+    return dependency instanceof AppBarLayout;
+  }
+
+
+  @Override
+  public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton fab, View dependency) {
+    if (dependency instanceof AppBarLayout) {
+      CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
+      int fabBottomMargin = lp.bottomMargin;
+      int distanceToScroll = fab.getHeight() + fabBottomMargin;
+      float ratio = (float) dependency.getY() / (float) toolbarHeight;
+      fab.setTranslationY(-distanceToScroll * ratio);
+    }
+    return true;
+  }
+}

+ 26 - 17
app/src/main/res/layout/activity_main.xml

@@ -7,31 +7,40 @@
   android:background="@color/CFFFFFF"
   android:orientation="vertical">
 
-  <LinearLayout
+  <FrameLayout
     android:id="@+id/container_main"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:background="@color/CFFFFFF"
     android:orientation="vertical"
     />
   <!--app:layout_behavior="@string/appbar_scrolling_view_behavior"-->
 
-  <android.support.design.widget.AppBarLayout
-    android:id="@+id/layout_app_bar"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    app:elevation="0dp"
-    >
+  <!--<android.support.design.widget.AppBarLayout-->
+    <!--android:id="@+id/layout_app_bar"-->
+    <!--android:layout_width="match_parent"-->
+    <!--android:layout_height="wrap_content"-->
+    <!--app:elevation="0dp"-->
+    <!--&gt;-->
+
+    <!--<android.support.v7.widget.Toolbar-->
+      <!--android:id="@+id/toolbar"-->
+      <!--android:layout_width="match_parent"-->
+      <!--android:layout_height="@dimen/action_bar_height"-->
+      <!--android:background="@color/CFFFFFF"-->
+      <!--android:minHeight="0dp"-->
+      <!--app:layout_scrollFlags="scroll"-->
+      <!--&gt;-->
 
-    <android.support.v7.widget.Toolbar
-      android:id="@+id/toolbar"
-      android:layout_width="match_parent"
-      android:layout_height="@dimen/action_bar_height"
-      android:background="@color/CFFFFFF"
-      android:minHeight="0dp"
-      app:layout_collapseMode="pin"
-      app:layout_scrollFlags="scroll">
+    <!--</android.support.v7.widget.Toolbar>-->
+  <!--</android.support.design.widget.AppBarLayout>-->
 
-    </android.support.v7.widget.Toolbar>
-  </android.support.design.widget.AppBarLayout>
+  <!--<android.support.design.widget.FloatingActionButton-->
+  <!--android:id="@+id/fab"-->
+  <!--android:layout_width="wrap_content"-->
+  <!--android:layout_height="wrap_content"-->
+  <!--android:layout_gravity="bottom|end"-->
+  <!--android:layout_margin="@dimen/fab_margin"-->
+  <!--android:src="@android:drawable/ic_dialog_info"/>-->
 
 </android.support.design.widget.CoordinatorLayout>

+ 1 - 2
app/src/main/res/layout/fragment_main.xml

@@ -4,8 +4,7 @@
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
-  android:layout_height="match_parent"
-  android:background="@android:color/white">
+  android:layout_height="match_parent">
 
 
   <android.support.v7.widget.RecyclerView

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

@@ -9,7 +9,7 @@
     <!--<item name="windowNoTitle">true</item>-->
   <!--</style>-->
 
-  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
+  <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
     <!-- Customize your theme here. -->
     <!--<item name="actionBarSize">@dimen/action_bar_height</item>-->
     <item name="colorPrimary">@color/CFFFFFF</item>