Quellcode durchsuchen

[공통][New] Toolbar 가 리스트 스크롤에 맞춰 사라지도록 수정
- UI 요구는 날씨와 사진이 가까워진 뒤 스크롤되면서 툴바 사라짐
- 현재 구현은 스크롤과 동시에 툴바 사라짐

hyodong.min vor 7 Jahren
Ursprung
Commit
e768c9bb39

+ 32 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/CustomScrollingViewBehavior.java

@@ -0,0 +1,32 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.activity;
+
+/**
+ * CustomScrollingViewBehavior
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 10. 16.]   [최초 작성]
+ * @since 2018. 10. 16.
+ */
+
+import android.support.design.widget.AppBarLayout;
+import android.support.design.widget.CoordinatorLayout;
+import android.view.MotionEvent;
+import android.view.View;
+
+/**
+ * Behavior which should be used by {@link View}s which can scroll vertically and support
+ * nested scrolling to automatically scroll any {@link AppBarLayout} siblings.
+ */
+public class CustomScrollingViewBehavior extends AppBarLayout.ScrollingViewBehavior {
+
+  @Override
+  public boolean onInterceptTouchEvent(CoordinatorLayout parent, View child, MotionEvent ev) {
+    return super.onInterceptTouchEvent(parent, child, ev);
+  }
+}

+ 15 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/MainActivity.java

@@ -5,8 +5,11 @@ 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;
@@ -17,6 +20,7 @@ import kr.co.zumo.app.lifeplus.supervisor.ScreenChangerHelper;
 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;
+import kr.co.zumo.app.lifeplus.view.fragment.main.MainContentsAdapter;
 
 /**
  * MainActivity
@@ -31,6 +35,9 @@ import kr.co.zumo.app.lifeplus.view.fragment.factory.FragmentFactory;
 public class MainActivity extends AppCompatActivity {
 
 
+  private RecyclerView contentsRecyclerView;
+  private MainContentsAdapter adapter;
+
   /***********************************
    * Activity
    ***********************************/
@@ -45,6 +52,8 @@ public class MainActivity extends AppCompatActivity {
 
     DialogHelper.getInstance().setFragmentManager(getSupportFragmentManager());
 
+    // actionbar
+    setSupportActionBar(findViewById(R.id.toolbar));
     ActionBarManager.getInstance().init(this, this.getSupportActionBar());
 
     ScreenChangerHelper.getInstance().setAppCompatActivity(this);
@@ -55,6 +64,12 @@ 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 CustomScrollingViewBehavior());
+    container.setLayoutParams(params);
+
     // ScreenStarter 에서 설정된 프래그먼트를 선택한다.
     int fragmentFlag = getIntent().getIntExtra(ScreenStarter.FLAG_FRAGMENT, 0);
     int screenId = new ScreenIDMapper().getScreenId(fragmentFlag);

+ 4 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/manager/ActionBarManager.java

@@ -6,7 +6,6 @@ import android.support.v7.app.ActionBar;
 import android.support.v7.widget.Toolbar;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.widget.FrameLayout;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
@@ -104,7 +103,9 @@ public class ActionBarManager implements IActionBarListener {
   }
 
   private void setViewVisible(View view, boolean isVisible) {
-    view.setVisibility(isVisible ? View.VISIBLE : View.INVISIBLE);
+    if (null != view) {
+      view.setVisibility(isVisible ? View.VISIBLE : View.INVISIBLE);
+    }
   }
 
 
@@ -148,7 +149,7 @@ public class ActionBarManager implements IActionBarListener {
     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 FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
+//    parent.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
 
     setDisplayOptions(android.app.ActionBar.DISPLAY_SHOW_CUSTOM);
     setElevation(0);

+ 11 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/util/ResourceUtil.java

@@ -6,6 +6,7 @@ package kr.co.zumo.app.lifeplus.util;
 import android.content.res.ColorStateList;
 import android.support.annotation.ArrayRes;
 import android.support.annotation.ColorRes;
+import android.support.annotation.DimenRes;
 import android.support.annotation.IdRes;
 import android.support.annotation.StringRes;
 import android.util.TypedValue;
@@ -90,6 +91,16 @@ public class ResourceUtil {
   }
 
 
+  /**
+   * dimen 가져오기 - px 로 반환됨
+   *
+   * @param dimenId
+   * @return
+   */
+  public static int getDimension(@DimenRes int dimenId) {
+    return (int) App.getInstance().getContext().getResources().getDimension(dimenId);
+  }
+
   /**
    * DP to pixel
    *

+ 1 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/fragment/main/MainContentsWeatherView.java

@@ -63,13 +63,12 @@ public class MainContentsWeatherView extends MainContentsView /*implements ViewT
 
 //    itemView.getViewTreeObserver().addOnGlobalLayoutListener(this);
 
-    initWeatherY = 114; //weather.getY();
+    initWeatherY = ResourceUtil.getDimension(R.dimen.main_contents_weather_marget_top); //weather.getY();
     initY = 0; //itemView.getY(); //getScreenY(itemView);
     Log.i("APP# MainContentsWeatherView | init", "|" + " initY: " + initY + " initWeatherY: " + initWeatherY + ", this: " + this);
   }
 
 
-
   @Override
   public void dispose() {
     Log.i("APP#  MainContentsWeatherView | dispose", "|" + " this: " + this);

+ 24 - 7
app/src/main/res/layout/activity_main.xml

@@ -1,20 +1,37 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout
+<android.support.design.widget.CoordinatorLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   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"
-  tools:fragmentActivity=".MainActivity">
+  android:background="@color/CFFFFFF"
+  android:orientation="vertical">
 
   <LinearLayout
     android:id="@+id/container_main"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:orientation="vertical"
+    />
+  <!--app:layout_behavior="@string/appbar_scrolling_view_behavior"-->
 
-  </LinearLayout>
+  <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.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.constraint.ConstraintLayout>
+</android.support.design.widget.CoordinatorLayout>

+ 5 - 12
app/src/main/res/layout/fragment_main.xml

@@ -5,20 +5,13 @@
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
-  android:background="@android:color/white"
-  tools:fragmentActivity=".MainActivity">
+  android:background="@android:color/white">
 
-  <LinearLayout
-    android:id="@+id/container_main"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
 
-    <android.support.v7.widget.RecyclerView
-      android:id="@+id/recycler_view_main"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"/>
-  </LinearLayout>
+  <android.support.v7.widget.RecyclerView
+    android:id="@+id/recycler_view_main"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"/>
 
   <LinearLayout
     android:layout_width="match_parent"

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

@@ -7,7 +7,7 @@
   android:layout_height="303dp"
   android:background="@color/CFFFFFF"
   android:orientation="vertical"
-  android:paddingTop="38dp">
+  android:paddingTop="@dimen/main_contents_weather_marget_top">
 
   <LinearLayout
     android:id="@+id/layout_container_weather"

+ 2 - 0
app/src/main/res/values/dimens.xml

@@ -4,4 +4,6 @@
   <dimen name="activity_vertical_margin">16dp</dimen>
   <dimen name="fab_margin">16dp</dimen>
   <dimen name="action_bar_height">62dp</dimen>
+  <dimen name="main_contents_weather_marget_top">38dp</dimen>  <!--38dp-->
+
 </resources>

+ 4 - 2
app/src/main/res/values/styles.xml

@@ -9,12 +9,14 @@
     <!--<item name="windowNoTitle">true</item>-->
   <!--</style>-->
 
-  <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
     <!-- Customize your theme here. -->
-    <item name="actionBarSize">@dimen/action_bar_height</item>
+    <!--<item name="actionBarSize">@dimen/action_bar_height</item>-->
     <item name="colorPrimary">@color/CFFFFFF</item>
     <item name="colorPrimaryDark">@color/C000000</item>
     <item name="colorAccent">@color/C000000</item>
+    <item name="android:windowBackground">@color/CFFFFFF</item>
+    <item name="android:windowContentOverlay">@null</item>
     <!--<item name="android:windowFullscreen">true</item>-->
     <!--<item name="android:fontFamily">@font/font1</item>--> <!-- Toast 에 적용이 안된다. -->
   </style>