스팀 앱 - 개발 중: 댓글 리스트 팝업 관련 레이아웃

스팀 앱 - 개발 중: 댓글 리스트 팝업 관련 레이아웃

2024. 10. 15 (화) | Written by @dorian-mobileapp

어제 보여 드린 위의 스크린샷. 이걸 어떻게 구현했는지 레이아웃 XML 코드를 먼저 보여 드립니다.

fragment_reply_list_dialog.xml

댓글 리스트 팝업(바텀시트)을 구성하는 레이아웃입니다. 크게 2가지 영역으로 나뉩니다.

  • '댓글' 텍스트 그리고 X 버튼을 보여주는 상단 바
  • 댓글 리스트를 보여 줄 RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto">

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

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="8dp">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:text="@string/title_reply"
                android:textColor="@android:color/black"
                android:textSize="24sp"
                android:textStyle="bold" />

            <ImageView
                android:id="@+id/image_close"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:src="@drawable/ic_close" />

        </RelativeLayout>

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/list_reply"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            tools:context=".ui.post.content.ReplyListDialogFragment"
            tools:listitem="@layout/layout_reply_item" />

    </LinearLayout>

</layout>

layout_reply_item.xml

댓글 리스트의 각 항목을 보여주기 위한 레이아웃입니다. 다음과 같이 구성되어 있습니다.

  • 댓글 작성자의 프로필 이미지를 보여줄 ImageView
  • 작성자 계정, 작성 시간, 보상 금액, 업보트 개수, 다운보트 개수를 보여줄 TextView
  • 댓글 내용을 보여줄 WebView (내용은 markdown 포맷이고 이를 HTML 포맷으로 변환하여 웹뷰에 로딩)
<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/white"
        android:padding="10dp">

        <RelativeLayout
            android:id="@+id/layout_reply_account_time"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toTopOf="parent">

            <ImageView
                android:id="@+id/image_post_author_profile"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_alignParentLeft="true"
                tools:src="@mipmap/ic_launcher_round" />

            <TextView
                android:id="@+id/text_post_author"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/image_post_author_profile"
                android:layout_centerVertical="true"
                android:layout_marginLeft="10dp"
                android:textColor="@color/black"
                android:textSize="16sp"
                android:textStyle="bold"
                tools:text="dorian-mobileapp (00)" />

            <TextView
                android:id="@+id/text_created_time"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:maxLines="1"
                android:text=""
                android:textSize="16sp"
                tools:text="1 days ago" />

        </RelativeLayout>

        <WebView
            android:id="@+id/web_reply_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            app:layout_constraintTop_toBottomOf="@id/layout_reply_account_time"
            tools:ignore="WebViewLayout" />

        <RelativeLayout
            android:id="@+id/layout_reply_rewards_votes"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"
            app:layout_constraintTop_toBottomOf="@id/web_reply_content">

            <TextView
                android:id="@+id/text_rewards"
                android:layout_width="wrap_content"
                android:layout_height="18sp"
                android:maxLines="1"
                android:textColor="@color/black"
                android:textSize="16sp"
                tools:text="$987.654" />

            <TextView
                android:id="@+id/text_upvotes"
                android:layout_width="wrap_content"
                android:layout_height="18sp"
                android:layout_toRightOf="@id/text_rewards"
                android:layout_marginLeft="6dp"
                android:maxLines="1"
                android:text=''
                android:textColor="@color/black"
                android:textSize="16sp"
                tools:text="\uD83D\uDD3A 123" />

            <TextView
                android:id="@+id/text_downvotes"
                android:layout_width="wrap_content"
                android:layout_height="18sp"
                android:layout_marginLeft="6dp"
                android:layout_toRightOf="@id/text_upvotes"
                android:maxLines="1"
                android:text=''
                android:textColor="@color/black"
                android:textSize="16sp"
                tools:text="\uD83D\uDD3B 0" />

        </RelativeLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_marginTop="10dp"
            android:background="@android:color/darker_gray"
            app:layout_constraintTop_toBottomOf="@id/layout_reply_rewards_votes"
            app:layout_constraintBottom_toBottomOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

Layout provided by Steemit Enhancer hommage by ayogom


Posted through the ECblog app (https://blog.etain.club)
Sort:  

안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.


안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @dorian-mobileapp님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.21
TRX 0.20
JST 0.035
BTC 91107.18
ETH 3170.38
USDT 1.00
SBD 2.99