Przeglądaj źródła

[공통][New] IDialogBase 추가
- DialogFragment 와 BottomSheetDialogFragment 를 함께 사용하기 위함
- MoreInfoDialog 의 모클래스를 BottomSheetDialogFragment 로 교체
- 기타 레이아웃 수정

hyodong.min 7 lat temu
rodzic
commit
5a022262b9

+ 9 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/util/ResourceUtil.java

@@ -122,7 +122,7 @@ public class ResourceUtil {
    * @return
    */
   public static int getDimension(@DimenRes int dimenId) {
-    return (int) App.getInstance().getContext().getResources().getDimension(dimenId);
+    return (int) App.getInstance().getContext().getResources().getDimensionPixelSize(dimenId);
   }
 
   /**
@@ -146,4 +146,12 @@ public class ResourceUtil {
     return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, App.getInstance().getContext().getResources().getDisplayMetrics());
   }
 
+  public static int getStatusBarHeight() {
+    int statusBarHeight = 0;
+    int resId = App.getInstance().getContext().getResources().getIdentifier("status_bar_height", "dimen", "android");
+    if (resId > 0) {
+      statusBarHeight = App.getInstance().getContext().getResources().getDimensionPixelSize(resId);
+    }
+    return statusBarHeight;
+  }
 }

+ 4 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/DialogBase.java

@@ -6,6 +6,7 @@ package kr.co.zumo.app.lifeplus.view.dialog;
 import android.content.DialogInterface;
 import android.os.Bundle;
 import android.support.v4.app.DialogFragment;
+import android.util.Log;
 import android.view.WindowManager;
 
 import kr.co.zumo.app.R;
@@ -20,7 +21,7 @@ import kr.co.zumo.app.R;
  * @history 민효동   [2018. 9. 14.]   [최초 작성]
  * @since 2018. 9. 14.
  */
-public abstract class DialogBase<CL extends ICustomDialogCancelListener> extends DialogFragment {
+public abstract class DialogBase<CL extends ICustomDialogCancelListener> extends DialogFragment implements IDialogBase<CL> {
   private CL customListener;
   private boolean isDismissed = false;
 
@@ -85,6 +86,8 @@ public abstract class DialogBase<CL extends ICustomDialogCancelListener> extends
   public void dismiss() {
     try {
       super.dismissAllowingStateLoss();
+    } catch (Exception e) {
+      Log.w("APP# DialogBottomBase | dismiss", "|" + e.getLocalizedMessage());
     } finally {
       isDismissed = true;
     }

+ 120 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/DialogBottomBase.java

@@ -0,0 +1,120 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.dialog;
+
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.design.widget.BottomSheetDialogFragment;
+import android.util.Log;
+import android.view.WindowManager;
+
+import kr.co.zumo.app.R;
+
+/**
+ * DialogBase
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 9. 14.]   [최초 작성]
+ * @since 2018. 9. 14.
+ */
+public abstract class DialogBottomBase<CL extends ICustomDialogCancelListener> extends BottomSheetDialogFragment implements IDialogBase<CL>{
+  private CL customListener;
+  private boolean isDismissed = false;
+
+  public CL getCustomListener() {
+    return customListener;
+  }
+
+  public void setCustomListener(CL customListener) {
+    this.customListener = customListener;
+  }
+
+  @Override
+  public final void onActivityCreated(Bundle savedInstanceState) {
+    super.onActivityCreated(savedInstanceState);
+
+    onActivityCreatedInternal();
+  }
+
+  protected abstract void onActivityCreatedInternal();
+
+  /**
+   * 다이얼로그 표시 에니메이션 적용
+   * - onActivityCreatedInternal() 안에서 처리해줘야한다.
+   */
+  protected void applyAnimation() {
+    if (null != getDialog() && null != getDialog().getWindow()) {
+      getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
+    }
+  }
+
+  /**
+   * 다이얼로그 전체 화면 적용
+   * - onActivityCreatedInternal() 안에서 처리해줘야한다.
+   */
+  protected void applyFullScreen() {
+    if (null != getDialog() && null != getDialog().getWindow()) {
+      //Full Screen dialog
+      getDialog().getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
+    }
+  }
+
+  /**
+   * dismiss 확인
+   *
+   * @return
+   */
+  public boolean isDismissed() {
+    return isDismissed;
+  }
+
+  /**
+   * Full screen
+   *
+   * @return
+   */
+  @Override
+  public int getTheme() {
+//    return R.style.FullScreenDialog;
+    return 0;
+  }
+
+  @Override
+  public void dismiss() {
+    try {
+      super.dismissAllowingStateLoss();
+    } catch (Exception e) {
+      Log.w("APP# DialogBottomBase | dismiss", "|" + e.getLocalizedMessage());
+    } finally {
+      isDismissed = true;
+    }
+  }
+
+  @Override
+  public void dismissAllowingStateLoss() {
+    super.dismissAllowingStateLoss();
+    isDismissed = true;
+  }
+
+  /**
+   * dispose
+   */
+  public void dispose() {
+    if (isDismissed() == false) {
+      dismiss();
+    }
+  }
+
+  @Override
+  public void onCancel(DialogInterface dialog) {
+    super.onCancel(dialog);
+
+    if (null != getCustomListener()) {
+      getCustomListener().onDialogCanceled(this);
+    }
+  }
+}

+ 1 - 4
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/DialogBuilder.java

@@ -19,7 +19,7 @@ import kr.co.zumo.app.lifeplus.view.dialog.factory.IDialogFactory;
  * @history 민효동   [2018-09-23]   [최초 작성]
  * @since 2018-09-23
  */
-public class DialogBuilder<T extends DialogBase, CL extends ICustomDialogCancelListener> {
+public class DialogBuilder<T extends IDialogBase, CL extends ICustomDialogCancelListener> {
 
   private IDialogFactory factory;
   private int dialogId;
@@ -92,9 +92,6 @@ public class DialogBuilder<T extends DialogBase, CL extends ICustomDialogCancelL
   public T show() {
     T dialog = build();
     try {
-      // fixme 백그라운드에서 팝업을 열려고 시도할 경우, commit 오류가 발생한다.
-      // -> 1. 백그라운드에서는 팝업을 열려는 시도 자체를 하지 못하도록 함 (observable dispose 등)
-      // -> 2. 열려고 하면 팝업을 대기 상태로 뒀다가 onResume() 시 열어줌.
       dialog.show(manager, dialog.getClass().getSimpleName());
     } catch (Exception e) {
       Log.e("APP#  DialogBuilder | show", "| >>>>>>>>>>>>>>>> " + e.getLocalizedMessage());

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/IAttribute.java

@@ -14,7 +14,7 @@ package kr.co.zumo.app.lifeplus.view.dialog;
  * @since 2018-09-23
  */
 
-public interface IAttribute<T extends DialogBase> {
+public interface IAttribute<T extends IDialogBase> {
   /**
    * dialog 에 속성(메서드)를 지정할 수 있다.
    *

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/ICustomConfirmListener.java

@@ -15,7 +15,7 @@ import kr.co.zumo.app.lifeplus.view.Event;
  * @history 민효동   [2018. 11. 5.]   [최초 작성]
  * @since 2018. 11. 5.
  */
-public interface ICustomConfirmListener<T extends DialogBase> extends ICustomDialogCancelListener<T> {
+public interface ICustomConfirmListener<T extends IDialogBase> extends ICustomDialogCancelListener<T> {
 
   void onPositiveResult(T dialog, Event event);
 

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/ICustomDialogCancelListener.java

@@ -13,7 +13,7 @@ package kr.co.zumo.app.lifeplus.view.dialog;
  * @history 민효동   [2018. 11. 5.]   [최초 작성]
  * @since 2018. 11. 5.
  */
-public interface ICustomDialogCancelListener<T extends DialogBase> {
+public interface ICustomDialogCancelListener<T extends IDialogBase> {
 
   /**
    * 취소/back key 등 처리 없이 닫는 경우

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/ICustomDialogListener.java

@@ -15,7 +15,7 @@ import kr.co.zumo.app.lifeplus.view.Event;
  * @history 민효동   [2018. 11. 5.]   [최초 작성]
  * @since 2018. 11. 5.
  */
-public interface ICustomDialogListener<T extends DialogBase> extends ICustomDialogCancelListener<T>{
+public interface ICustomDialogListener<T extends IDialogBase> extends ICustomDialogCancelListener<T>{
   /**
    * 특정 결과가 있을 경우 실행
    *

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/ICustomFilterListener.java

@@ -17,7 +17,7 @@ import kr.co.zumo.app.lifeplus.bean.FilterBean;
  * @history 민효동   [2018. 11. 5.]   [최초 작성]
  * @since 2018. 11. 5.
  */
-public interface ICustomFilterListener<T extends DialogBase> extends ICustomDialogListener<T> {
+public interface ICustomFilterListener<T extends IDialogBase> extends ICustomDialogListener<T> {
 
   void onFilterResult(ArrayList<FilterBean> list);
 }

+ 48 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/IDialogBase.java

@@ -0,0 +1,48 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.dialog;
+
+
+import android.support.v4.app.FragmentManager;
+
+/**
+ * IDialogBase
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018-12-02]   [최초 작성]
+ * @since 2018-12-02
+ */
+public interface IDialogBase<CL extends ICustomDialogCancelListener> {
+  CL getCustomListener();
+
+  void setCustomListener(CL customListener);
+
+  /**
+   * dismiss 확인
+   *
+   * @return
+   */
+  boolean isDismissed();
+
+  /**
+   * Full screen
+   *
+   * @return
+   */
+  int getTheme();
+
+  void dismiss();
+
+  void dismissAllowingStateLoss();
+
+  /**
+   * dispose
+   */
+  void dispose();
+
+  void show(FragmentManager manager, String tag);
+}

+ 23 - 9
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/MoreInfoDialog.java

@@ -6,13 +6,14 @@ import android.support.annotation.Nullable;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.Window;
 import android.widget.LinearLayout;
 
 import java.util.List;
 
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsMoreInfoBean;
+import kr.co.zumo.app.lifeplus.model.SuperModel;
+import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.custom.contents.CustomMoreInfoView;
 
@@ -26,7 +27,7 @@ import kr.co.zumo.app.lifeplus.view.custom.contents.CustomMoreInfoView;
  * @history 하세미   [2018-11-29]   [최초 작성]
  * @since 2018-11-29
  */
-public class MoreInfoDialog extends DialogBase<ICustomDialogListener<MoreInfoDialog>> {
+public class MoreInfoDialog extends DialogBottomBase<ICustomDialogListener<MoreInfoDialog>> {
 
   private static final String PERIOD_INFO = "02"; //기간
   private static final String ORGANIZATION_INFO = "03";//편성
@@ -45,15 +46,27 @@ public class MoreInfoDialog extends DialogBase<ICustomDialogListener<MoreInfoDia
   @Nullable
   @Override
   public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-
     return inflater.inflate(R.layout.dialog_contents_more_info, container, false);
   }
 
+  /**
+   * Full screen
+   *
+   * @return
+   */
+  @Override
+  public int getTheme() {
+    return 0;
+  }
+
   @Override
   protected void onActivityCreatedInternal() {
-    Window window = getDialog().getWindow();
-    window.setBackgroundDrawableResource(R.color.C99000000);
     getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogMoreInfoAnimation;
+
+    int statusBarHeight = ResourceUtil.getStatusBarHeight();
+
+    getView().getLayoutParams().height = SuperModel.getInstance().getScreenHeight() - ResourceUtil.dpToPx(255) - statusBarHeight;
+
     layoutMoreInfoContainer = getView().findViewById(R.id.layout_more_info_container);
 
     for (int i = 0; i < contentsMoreInfoBeanList.size(); i++) {
@@ -93,12 +106,15 @@ public class MoreInfoDialog extends DialogBase<ICustomDialogListener<MoreInfoDia
         default:
           break;
       }
-
       if (null != customMoreInfoView) {
         layoutMoreInfoContainer.addView(customMoreInfoView);
       }
     }
 
+    getView().findViewById(R.id.layout_more_info_dialog).setOnClickListener(v -> {
+
+    });
+
     getView().findViewById(R.id.layout_more_info_pop_up).setOnClickListener(view -> {
       getCustomListener().onDialogCanceled(MoreInfoDialog.this);
     });
@@ -107,8 +123,6 @@ public class MoreInfoDialog extends DialogBase<ICustomDialogListener<MoreInfoDia
       getCustomListener().onDialogCanceled(MoreInfoDialog.this);
     });
 
-    getView().findViewById(R.id.layout_more_info_dialog).setOnClickListener(null);
-
     /*하단 버튼 클릭 이벤트*/
     getView().findViewById(R.id.image_view_call_info).setOnClickListener(view -> {
       if (null != phoneNumber) {
@@ -131,11 +145,11 @@ public class MoreInfoDialog extends DialogBase<ICustomDialogListener<MoreInfoDia
       getCustomListener().onDialogResult(MoreInfoDialog.this, new Event.Builder(Event.ADDRESS).build());
     });
 
-
   }
 
   public void setMoreInfoContents(List<ContentsMoreInfoBean> contentsMoreInfoBeanList) {
     this.contentsMoreInfoBeanList = contentsMoreInfoBeanList;
   }
+
 }
 

+ 7 - 7
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/factory/BasicDialogFactory.java

@@ -4,21 +4,21 @@
 package kr.co.zumo.app.lifeplus.view.dialog.factory;
 
 import kr.co.zumo.app.lifeplus.view.dialog.AddRegistrationDialog;
+import kr.co.zumo.app.lifeplus.view.dialog.AlertDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.AppReviewDialog;
+import kr.co.zumo.app.lifeplus.view.dialog.CategoryFirstMainFilterDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.CategorySecondMainFilterDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.CoinInformationDialog;
-import kr.co.zumo.app.lifeplus.view.dialog.AlertDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.ConfirmDialog;
+import kr.co.zumo.app.lifeplus.view.dialog.DialogID;
+import kr.co.zumo.app.lifeplus.view.dialog.IDialogBase;
 import kr.co.zumo.app.lifeplus.view.dialog.LoadingDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.MoreInfoDialog;
-import kr.co.zumo.app.lifeplus.view.dialog.ShareDialog;
-import kr.co.zumo.app.lifeplus.view.dialog.DialogBase;
-import kr.co.zumo.app.lifeplus.view.dialog.DialogID;
-import kr.co.zumo.app.lifeplus.view.dialog.CategoryFirstMainFilterDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.PinConfirmDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.PinUnlockDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.PolicyDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.PromotionDialog;
+import kr.co.zumo.app.lifeplus.view.dialog.ShareDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.TooltipDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.WebDialog;
 
@@ -35,8 +35,8 @@ import kr.co.zumo.app.lifeplus.view.dialog.WebDialog;
 public class BasicDialogFactory implements IDialogFactory {
 
   @Override
-  public <T extends DialogBase> T getDialogById(@DialogID.ID int id) {
-    DialogBase dialog;
+  public <T extends IDialogBase> T getDialogById(@DialogID.ID int id) {
+    IDialogBase dialog;
     switch (id) {
       case DialogID.LOADING:
         dialog = new LoadingDialog();

+ 2 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/factory/IDialogFactory.java

@@ -3,8 +3,8 @@
  */
 package kr.co.zumo.app.lifeplus.view.dialog.factory;
 
-import kr.co.zumo.app.lifeplus.view.dialog.DialogBase;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogID;
+import kr.co.zumo.app.lifeplus.view.dialog.IDialogBase;
 
 /**
  * IDialogFactory
@@ -17,5 +17,5 @@ import kr.co.zumo.app.lifeplus.view.dialog.DialogID;
  * @since 2018-09-23
  */
 public interface IDialogFactory {
-  <T extends DialogBase> T getDialogById(@DialogID.ID int id);
+  <T extends IDialogBase> T getDialogById(@DialogID.ID int id);
 }

+ 52 - 40
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsDetailPresenter.java

@@ -14,6 +14,7 @@ import kr.co.zumo.app.lifeplus.view.dialog.DialogBuilder;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogID;
 import kr.co.zumo.app.lifeplus.view.dialog.ICustomConfirmListener;
 import kr.co.zumo.app.lifeplus.view.dialog.ICustomDialogListener;
+import kr.co.zumo.app.lifeplus.view.dialog.IDialogBase;
 import kr.co.zumo.app.lifeplus.view.dialog.MoreInfoDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.TooltipDialog;
 
@@ -29,6 +30,7 @@ import kr.co.zumo.app.lifeplus.view.dialog.TooltipDialog;
  */
 public class ContentsDetailPresenter extends ContentsBasePresenter<ContentsDetailModel, IContentsDetailView> {
 
+  private IDialogBase dialogBase;
   private DoubleChecker doubleChecker;
 
   public ContentsDetailPresenter(ContentsDetailModel model, IContentsDetailView view) {
@@ -52,7 +54,6 @@ public class ContentsDetailPresenter extends ContentsBasePresenter<ContentsDetai
 
   @Override
   protected void destroyInternal() {
-
   }
 
   @Override
@@ -351,47 +352,58 @@ public class ContentsDetailPresenter extends ContentsBasePresenter<ContentsDetai
   }
 
   private void showMoreInfoPopup(int index) {
-    new DialogBuilder<MoreInfoDialog, ICustomDialogListener>(getFragmentManager(), DialogID.MORE_INFO)
-      .listener(new ICustomDialogListener<MoreInfoDialog>() {
 
-        @Override
-        public void onDialogResult(MoreInfoDialog dialog, Event event) {
-          switch (event.getEventId()) {
-            case Event.CALL_INFO:
-              String phoneNumber = event.getString();
-              phoneNumber = phoneNumber.trim().replaceAll("-", "");
-              phoneNumber = "tel:" + phoneNumber;
-              view.setPhoneNumberInCall(phoneNumber);
-
-              break;
-            case Event.LINK:
-              showErrorDialog(R.string.ready_comment);
-              break;
-            case Event.HOME_PAGE:
-              showErrorDialog(R.string.ready_comment);
-              break;
-            case Event.INSTAGRAM:
-              showErrorDialog(R.string.ready_comment);
-              break;
-            case Event.FACE_BOOK:
-              showErrorDialog(R.string.ready_comment);
-              break;
-            case Event.ADDRESS:
-              showErrorDialog(R.string.ready_comment);
-              break;
-            default:
-              break;
+//    BottomSheetDialog dialog = new BottomSheetDialog();
+//
+//    dialog.setMoreInfoContents(model.getContentsDetailListBean().getItemDetailList().get(index).getMoreInfoList());
+//
+//    dialog.show(getFragmentManager(), "b");
+//
+    if (null == dialogBase) {
+      dialogBase = new DialogBuilder<MoreInfoDialog, ICustomDialogListener>(getFragmentManager(), DialogID.MORE_INFO)
+        .listener(new ICustomDialogListener<MoreInfoDialog>() {
+
+          @Override
+          public void onDialogResult(MoreInfoDialog dialog, Event event) {
+            dialogBase = null;
+            switch (event.getEventId()) {
+              case Event.CALL_INFO:
+                String phoneNumber = event.getString();
+                phoneNumber = phoneNumber.trim().replaceAll("-", "");
+                phoneNumber = "tel:" + phoneNumber;
+                view.setPhoneNumberInCall(phoneNumber);
+
+                break;
+              case Event.LINK:
+                showErrorDialog(R.string.ready_comment);
+                break;
+              case Event.HOME_PAGE:
+                showErrorDialog(R.string.ready_comment);
+                break;
+              case Event.INSTAGRAM:
+                showErrorDialog(R.string.ready_comment);
+                break;
+              case Event.FACE_BOOK:
+                showErrorDialog(R.string.ready_comment);
+                break;
+              case Event.ADDRESS:
+                showErrorDialog(R.string.ready_comment);
+                break;
+              default:
+                break;
+            }
           }
-        }
 
-        @Override
-        public void onDialogCanceled(MoreInfoDialog dialog) {
-          dialog.dispose();
-        }
-      })
-      .attribute(dialog -> {
-        dialog.setMoreInfoContents(model.getContentsDetailListBean().getItemDetailList().get(index).getMoreInfoList());
-      })
-      .show();
+          @Override
+          public void onDialogCanceled(MoreInfoDialog dialog) {
+            dialogBase = null;
+            dialog.dispose();
+          }
+        })
+        .attribute(dialog -> {
+          dialog.setMoreInfoContents(model.getContentsDetailListBean().getItemDetailList().get(index).getMoreInfoList());
+        })
+        .show();
+    }
   }
 }

+ 2 - 2
app/src/main/res/drawable/icon_info_instagram_wh.xml

@@ -1,5 +1,5 @@
-<vector android:height="12dp" android:viewportHeight="66"
-    android:viewportWidth="66" android:width="12dp" xmlns:android="http://schemas.android.com/apk/res/android">
+<vector android:height="17dp" android:viewportHeight="66"
+    android:viewportWidth="66" android:width="17dp" xmlns:android="http://schemas.android.com/apk/res/android">
     <path android:fillColor="#00000000" android:fillType="nonZero"
         android:pathData="M24.191,12.191L39.867,12.191A12,12 0,0 1,51.867 24.191L51.867,39.867A12,12 0,0 1,39.867 51.867L24.191,51.867A12,12 0,0 1,12.191 39.867L12.191,24.191A12,12 0,0 1,24.191 12.191z"
         android:strokeColor="#FFF" android:strokeWidth="4"/>

+ 12 - 12
app/src/main/res/layout/custom_listicle_image_view.xml

@@ -3,9 +3,9 @@
   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:descendantFocusability="blocksDescendants"
   android:layout_width="match_parent"
-  android:layout_height="match_parent">
+  android:layout_height="match_parent"
+  android:descendantFocusability="blocksDescendants">
 
   <android.support.v7.widget.RecyclerView
     android:id="@+id/recycler_view_listicle_view"
@@ -91,14 +91,14 @@
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_marginStart="25dp"
-    android:layout_marginBottom="8dp"
+    android:layout_marginBottom="15dp"
+    android:fontFamily="@font/spoqa"
     android:gravity="center_horizontal"
     android:lineSpacingExtra="7dp"
     android:textColor="@color/CFFFFFF"
     android:textSize="26dp"
     app:layout_constraintBottom_toTopOf="@+id/text_view_title"
     app:layout_constraintStart_toStartOf="parent"
-    android:fontFamily="@font/spoqa"
     tools:text="05"
     tools:textColor="@color/C000000"/>
 
@@ -108,22 +108,22 @@
     android:layout_height="7dp"
     android:layout_marginStart="4dp"
     android:layout_marginTop="13dp"
-    app:layout_constraintStart_toEndOf="@+id/text_view_title_number"
-    app:layout_constraintTop_toTopOf="@+id/text_view_title_number"
+    android:src="@drawable/oval_cffffff"
     app:layout_constraintBottom_toBottomOf="@+id/text_view_title_number"
-    android:src="@drawable/oval_cffffff"/>
+    app:layout_constraintStart_toEndOf="@+id/text_view_title_number"
+    app:layout_constraintTop_toTopOf="@+id/text_view_title_number"/>
 
   <TextView
     android:id="@+id/text_view_title"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
+    android:layout_marginStart="25dp"
+    android:layout_marginBottom="4dp"
     android:lineSpacingExtra="7dp"
     android:textColor="@color/CFFFFFF"
     android:textSize="18dp"
-    app:layout_constraintStart_toStartOf="parent"
-    android:layout_marginStart="25dp"
     app:layout_constraintBottom_toTopOf="@+id/text_view_sub_title"
-    android:layout_marginBottom="4dp"
+    app:layout_constraintStart_toStartOf="parent"
     tools:text="진주, 로스팅웨어"
     tools:textColor="@color/C000000"/>
 
@@ -131,13 +131,13 @@
     android:id="@+id/text_view_sub_title"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
+    android:layout_marginStart="25dp"
     android:layout_marginBottom="17dp"
     android:lineSpacingExtra="4dp"
     android:textColor="@color/CFFFFFF"
     android:textSize="12sp"
-    app:layout_constraintStart_toStartOf="parent"
-    android:layout_marginStart="25dp"
     app:layout_constraintBottom_toTopOf="@+id/layout_pager"
+    app:layout_constraintStart_toStartOf="parent"
     tools:text="대문샷을 부르는 감각적인 로스팅 팩토리
 대문샷을 부르는 감각적인 로스팅 팩토리"
     tools:textColor="@color/C000000"/>

+ 77 - 101
app/src/main/res/layout/dialog_contents_more_info.xml

@@ -10,9 +10,8 @@
 
   <android.support.constraint.ConstraintLayout
     android:id="@+id/layout_more_info_dialog"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:layout_marginTop="256dp"
+    android:layout_width="0dp"
+    android:layout_height="0dp"
     android:background="@color/CFFFFFF"
     app:layout_constraintBottom_toBottomOf="parent"
     app:layout_constraintEnd_toEndOf="parent"
@@ -25,10 +24,13 @@
       android:layout_height="wrap_content"
       android:layout_marginTop="5dp"
       android:padding="10dp"
+      android:scaleType="center"
       app:layout_constraintBottom_toTopOf="@+id/first_layout"
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintStart_toStartOf="parent"
       app:layout_constraintTop_toTopOf="parent"
+      app:layout_constraintVertical_bias="0"
+      app:layout_constraintVertical_chainStyle="spread_inside"
       app:srcCompat="@drawable/icon_info_down"
       />
 
@@ -36,11 +38,12 @@
       android:id="@+id/first_layout"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:layout_marginStart="25dp"
-      android:layout_marginTop="25dp"
-      app:layout_constraintBottom_toTopOf="@+id/scroll_view"
+      android:layout_marginTop="5dp"
+      android:paddingStart="25dp"
+      app:layout_constraintBottom_toTopOf="@+id/layout_contents"
       app:layout_constraintStart_toStartOf="parent"
-      app:layout_constraintTop_toTopOf="parent">
+      app:layout_constraintTop_toBottomOf="@id/image_view_info_down"
+      app:layout_constraintVertical_bias="0">
 
       <TextView
         android:layout_width="wrap_content"
@@ -51,177 +54,150 @@
         android:textSize="15sp"
         android:textStyle="bold"
         />
+
     </android.support.constraint.ConstraintLayout>
 
-    <ScrollView
-      android:id="@+id/scroll_view"
-      style="@style/ContentsScrollBars"
+    <android.support.constraint.ConstraintLayout
+      android:id="@+id/layout_contents"
       android:layout_width="match_parent"
       android:layout_height="0dp"
-      android:paddingStart="8dp"
-      android:paddingEnd="8dp"
+      android:paddingBottom="8dp"
       app:layout_constraintBottom_toTopOf="@+id/layout_more_info_button"
-      app:layout_constraintEnd_toEndOf="parent"
-      app:layout_constraintStart_toStartOf="parent"
       app:layout_constraintTop_toBottomOf="@+id/first_layout">
 
-      <LinearLayout
-        android:id="@+id/layout_more_info_container"
+      <ScrollView
+        android:id="@+id/scroll_view"
+        style="@style/ContentsScrollBars"
         android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_gravity="top"
-        android:orientation="vertical">
+        android:layout_height="wrap_content"
+        android:fillViewport="true"
+        android:paddingStart="8dp"
+        android:paddingEnd="8dp">
 
-        <TextView
+        <LinearLayout
+          android:id="@+id/layout_more_info_container"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
-          />
-      </LinearLayout>
-    </ScrollView>
-
+          android:layout_gravity="top"
+          android:orientation="vertical">
+
+          <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            />
+        </LinearLayout>
+      </ScrollView>
+    </android.support.constraint.ConstraintLayout>
 
     <android.support.constraint.ConstraintLayout
       android:id="@+id/layout_more_info_button"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:layout_marginStart="65dp"
-      android:layout_marginTop="9dp"
-
-      android:layout_marginBottom="25dp"
       android:background="@color/CFFFFFF"
+      android:paddingTop="9dp"
+      android:paddingEnd="20dp"
+      android:paddingBottom="25dp"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintStart_toStartOf="parent"
-      app:layout_constraintTop_toBottomOf="@+id/scroll_view">
+      app:layout_constraintTop_toBottomOf="@+id/layout_contents"
+      app:layout_constraintVertical_bias="1">
 
       <ImageView
         android:id="@+id/image_view_call_info"
         android:layout_width="37dp"
         android:layout_height="37dp"
+        android:layout_marginStart="5dp"
+        android:layout_marginEnd="5dp"
         android:background="@drawable/circle_c000000"
+        android:scaleType="center"
         android:visibility="gone"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toStartOf="@+id/image_view_link"
-        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintHorizontal_bias="1"
+        app:layout_constraintHorizontal_chainStyle="packed"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent"
-        tools:visibility="visible"/>
+        app:srcCompat="@drawable/icon_info_call_wh"
+        tools:visibility="visible"
+        />
 
       <ImageView
         android:id="@+id/image_view_link"
         android:layout_width="37dp"
         android:layout_height="37dp"
+        android:layout_marginStart="5dp"
+        android:layout_marginEnd="5dp"
         android:background="@drawable/circle_c000000"
+        android:scaleType="center"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toStartOf="@+id/image_view_home_page"
-        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintHorizontal_bias="1"
         app:layout_constraintStart_toEndOf="@+id/image_view_call_info"
-        app:layout_constraintTop_toTopOf="parent"/>
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/icon_link"/>
 
       <ImageView
         android:id="@+id/image_view_home_page"
         android:layout_width="37dp"
         android:layout_height="37dp"
+        android:layout_marginStart="5dp"
+        android:layout_marginEnd="5dp"
         android:background="@drawable/circle_c000000"
+        android:scaleType="center"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toStartOf="@+id/image_view_instagram"
-        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintHorizontal_bias="1"
         app:layout_constraintStart_toEndOf="@+id/image_view_link"
-        app:layout_constraintTop_toTopOf="parent"/>
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/icon_info_home_wh"
+        tools:visibility="visible"/>
 
       <ImageView
         android:id="@+id/image_view_instagram"
         android:layout_width="37dp"
         android:layout_height="37dp"
+        android:layout_marginStart="5dp"
+        android:layout_marginEnd="5dp"
         android:background="@drawable/circle_c000000"
+        android:scaleType="center"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toStartOf="@+id/image_view_facebook"
-        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintHorizontal_bias="1"
         app:layout_constraintStart_toEndOf="@+id/image_view_home_page"
-        app:layout_constraintTop_toTopOf="parent"/>
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/icon_info_instagram_wh"/>
 
       <ImageView
         android:id="@+id/image_view_facebook"
         android:layout_width="37dp"
         android:layout_height="37dp"
+        android:layout_marginStart="5dp"
+        android:layout_marginEnd="5dp"
         android:background="@drawable/circle_c000000"
+        android:scaleType="center"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toStartOf="@+id/image_view_address"
-        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintHorizontal_bias="1"
         app:layout_constraintStart_toEndOf="@+id/image_view_instagram"
-        app:layout_constraintTop_toTopOf="parent"/>
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/icon_info_facebook_wh"/>
 
       <ImageView
         android:id="@+id/image_view_address"
         android:layout_width="37dp"
         android:layout_height="37dp"
+        android:layout_marginStart="5dp"
+        android:layout_marginEnd="5dp"
         android:background="@drawable/circle_c000000"
+        android:scaleType="center"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintHorizontal_bias="1"
         app:layout_constraintStart_toEndOf="@+id/image_view_facebook"
-        app:layout_constraintTop_toTopOf="parent"/>
-
-
-      <ImageView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        app:layout_constraintBottom_toBottomOf="@+id/image_view_call_info"
-        app:layout_constraintEnd_toEndOf="@+id/image_view_call_info"
-        app:layout_constraintStart_toStartOf="@+id/image_view_call_info"
-        app:layout_constraintTop_toTopOf="@+id/image_view_call_info"
-        app:srcCompat="@drawable/icon_info_call_wh"
-        />
-
-      <ImageView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        app:layout_constraintBottom_toBottomOf="@+id/image_view_link"
-        app:layout_constraintEnd_toEndOf="@+id/image_view_link"
-        app:layout_constraintStart_toStartOf="@+id/image_view_link"
-        app:layout_constraintTop_toTopOf="@+id/image_view_link"
-        app:srcCompat="@drawable/icon_link"
-        />
-
-      <ImageView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        app:layout_constraintBottom_toBottomOf="@+id/image_view_home_page"
-        app:layout_constraintEnd_toEndOf="@+id/image_view_home_page"
-        app:layout_constraintStart_toStartOf="@+id/image_view_home_page"
-        app:layout_constraintTop_toTopOf="@+id/image_view_home_page"
-        app:srcCompat="@drawable/icon_info_home_wh"
-        />
-
-      <ImageView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        app:layout_constraintBottom_toBottomOf="@+id/image_view_instagram"
-        app:layout_constraintEnd_toEndOf="@+id/image_view_instagram"
-        app:layout_constraintStart_toStartOf="@+id/image_view_instagram"
-        app:layout_constraintTop_toTopOf="@+id/image_view_instagram"
-        app:srcCompat="@drawable/icon_info_instagram_wh"
-        />
-
-      <ImageView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        app:layout_constraintBottom_toBottomOf="@+id/image_view_facebook"
-        app:layout_constraintEnd_toEndOf="@+id/image_view_facebook"
-        app:layout_constraintStart_toStartOf="@+id/image_view_facebook"
-        app:layout_constraintTop_toTopOf="@+id/image_view_facebook"
-        app:srcCompat="@drawable/icon_info_facebook_wh"
-        />
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/icon_info_address_wh"/>
 
-      <ImageView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        app:layout_constraintBottom_toBottomOf="@+id/image_view_address"
-        app:layout_constraintEnd_toEndOf="@+id/image_view_address"
-        app:layout_constraintStart_toStartOf="@+id/image_view_address"
-        app:layout_constraintTop_toTopOf="@+id/image_view_address"
-        app:srcCompat="@drawable/icon_info_address_wh"
-        />
 
     </android.support.constraint.ConstraintLayout>
   </android.support.constraint.ConstraintLayout>