관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[안드로이드] 스크롤뷰 안에 리사이클러뷰 사용시 리사이클러뷰는 스크롤없이 아이템 전체 다 보이게하는 방법 본문

안드로이드

[안드로이드] 스크롤뷰 안에 리사이클러뷰 사용시 리사이클러뷰는 스크롤없이 아이템 전체 다 보이게하는 방법

막무가내막내 2019. 6. 5. 23:55
728x90

 

제목과 같은 형식일때에 대한 포스팅을 해보겠습니다.

다른말로 하면 스크롤뷰안에 리사이클러뷰를 사용할 때 스크롤뷰가 하나있는 효과(?)를 내는 방법이라고도 볼 수 있겠습니다.

예시를 살펴보겠습니다.

 

일단 효과를 적용한 사진입니다.

 

저는 게시물의 내용이 양이 어느정도일지모르므로 바깥은 꼭 스크롤뷰를 해야하는 상황이였고 댓글들은 리사이클러뷰로 DB로부터 가져와서 저장해야하는 상황이였습니다.

그런데 그냥 스크롤뷰와 리사이클러뷰를 사용시 이중스크롤이 발생하는데 댓글 칸이 두세개밖에 안보이고 15개의 댓글을 두세개만한칸으로 스크롤을 해서 봐야하는 문제가 발생하였습니다. 만약 게시물이 전체화면을 넘어가면?? ㄷㄷ..

 

그래서 다음과 같이 해결했습니다.

최상단 ScrollViews대신 NestedScrollView를 사용하고 리사이클러뷰에는 android:nestedScrollingEnabled="false" 속성을 추가하는 것이였습니다.

 

그러나 이 방법에는 단점도 존재합니다. 리사이클러뷰의 메모리절약 장점이 사라지게 됩니다.. ㅠㅠ

 

전체코드는 다음과 같습니다. (처음 NestedScrollView와 RecyclerView의 속성을 확인하면됩니다.)

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView 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:orientation="vertical"
    android:padding="8dp"
    tools:context=".activity.FullBoardActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="8dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
                android:id="@+id/fullboard_iv_photo"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/com_facebook_profile_picture_blank_square"
                app:civ_border_color="#FF000000"
                app:civ_border_width="2dp"
                app:layout_constraintVertical_bias="0.06999999" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="8dp"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/fullboard_tv_title"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="글 제목입니다."
                    android:textColor="@color/black"
                    android:textSize="20dp"
                    android:textStyle="bold" />

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/fullboard_tv_nickname"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="닉네임" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text=" | " />

                    <TextView
                        android:id="@+id/fullboard_tv_date"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="2019-01-01 12:00" />

                </LinearLayout>
            </LinearLayout>
        </LinearLayout>

        <ImageView
            android:id="@+id/fullboard_iv_uploadimage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp" />

        <TextView
            android:id="@+id/fullboard_tv_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="내용입니다."
            android:textColor="@color/black" />

        <ImageButton
            android:id="@+id/fullboard_ibtn_recommendup"
            android:layout_width="100dp"
            android:layout_height="60dp"
            android:layout_gravity="center"
            android:layout_marginTop="30dp"
            android:background="@color/white"
            android:scaleType="centerCrop"
            android:src="@drawable/ic_recommend" />

        <TextView
            android:id="@+id/fullboard_tv_recommend"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:text="0"
            android:textSize="30dp" />
<LinearLayout
    android:layout_marginTop="10dp"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:gravity="right"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/fullboard_tv_revise"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="수정" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="  |  " />

    <TextView
        android:id="@+id/fullboard_tv_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="삭제" />
</LinearLayout>
        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_marginTop="20dp"
            android:background="@color/black" />
        <LinearLayout
            android:id="@+id/fullboard_linear"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:background="@drawable/login_input"
            android:orientation="horizontal"
            android:focusableInTouchMode="true"
            android:padding="5dp">

            <EditText
                android:id="@+id/fullboard_pt_inputcomment"
                android:layout_width="0dp"
                android:layout_height="50dp"
                android:layout_margin="2dp"
                android:layout_weight="7"
                android:background="@drawable/message_input"
                android:hint="댓글입력"
                android:inputType="text"
                android:maxLength="150"
                android:maxLines="10"
                android:padding="5dp" />

            <Button
                android:id="@+id/fullboard_btn_write"
                android:layout_width="0dp"
                android:layout_height="50dp"
                android:layout_weight="1"
                android:background="@color/textBlue"
                android:text="등록" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:gravity="left"
            android:orientation="horizontal">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="댓글개수 : "
                android:textColor="@color/black"
                android:textSize="15dp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/fullboard_tv_commentsum"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="0"
                android:textColor="@color/black"
                android:textSize="15dp"
                android:textStyle="bold" />
        </LinearLayout>

        <android.support.v7.widget.RecyclerView
            android:nestedScrollingEnabled="false"
            android:id="@+id/fullboard_rev_comment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
           />
    </LinearLayout>
</android.support.v4.widget.NestedScrollView>
728x90
Comments