Material Components(CardView/Flexbox Layout/TextinputLayout/Chips)(임시 검색 리더 화면)

하고 싶은 일

  • [대목표] 소설가의 소설을 안드로이드 앱으로 다운로드하여 제작한다.
  • [이 문장의 종점] 소설 검색 화면의 실현
  • 소설 검색 화면의 디자인


    필요조건

  • 는 공식(PC 버전)과 기본적으로 동일한 검색 기능을 갖추어야 한다.
  • 이동에서의 용이성을 고려해 다음과 같은 시행 방침을 정한다.
  • 직접 입력(EditText) 및 선택 항목에서 검색 키워드
  • 를 선택할 수 있습니다.
  • 옵션에서 유형을 선택할 수 있습니다.
  • 읽기 시간 등 필터 조건은 드럼리스트의 선택에만 해당
  • 가능한 Material Design의 UI를 사용합니다.구체적으로 다음 UI를 사용해 보십시오.
  • TextinputLayout
  • FlexboxLayout
  • CardView
  • Chips
  • 소설 검색 화면의 설치


    소설 검색 화면

  • 검색어를 선택하는 입력과 유형, 세부 설정 등의 UI가 있습니다.
  • TextInputLayout / TextInputEditText

  • 키워드를 입력할 때EditText가 아니라TextInputLayoutTextInputEditText로 이루어진다.
  • TextInputLayout 본문(Input text) 외에 레이블(Label text), 보조 텍스트(Helper text) 등의 소재를 디자인할 부품(상세내용 참조Material I/O
  • 을 지정할 수 있음

    SearchFragment.xml
    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/text_input_search"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:helperText="空白で区切って複数のキーワードを指定できます"
        app:helperTextEnabled="true"
        android:hint="検索ワード"
        app:hintEnabled="true">
        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/editText_search"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text" />
    </com.google.android.material.textfield.TextInputLayout>
    
  • 공식규정android:hint측은 수여TextInputEditText측이지만 안드로이드 8(Oreo)의 고장으로 발생NullPointerException하여 TextInputLayout측으로 이동android:hint한다.
  • CardView

  • 검색 기준을 입력할 때 CardVie를 이용한 UI를 구축합니다.
  • 모든 항목이 항상 표시되는 것이 아니라 헤더를 사용하여 디스플레이 상태를 변경합니다.
  • 벚꽃 선생님의 신축된CardView(cachapa/Expandable Layout+RecyclearView+CardView 샘플) 만들기를 참고하여 입력용 레이아웃을 만들어 주세요.
  • 신축성 있는 CardView.xml
    
        <androidx.cardview.widget.CardView>
            <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/layout_search">
                <TextView android:text="検索ワードを指定する" /> <!-- タイトル -->
                <net.cachapa.expandablelayout.ExpandableLayout
                 android:id="@+id/expandable_layout_search_subtitle"
                 app:el_expanded="true"> <!-- サブタイトル 領域: デフォルト表示あり -->
                    <TextView android:id="@+id/expand_search_subtitle"/> <!-- サブタイトル -->
                </net.cachapa.expandablelayout.ExpandableLayout>
                <ImageView app:srcCompat="@drawable/expand_arrow"/> <!-- 伸び縮みアイコン -->
                <net.cachapa.expandablelayout.ExpandableLayout
                 android:id="@+id/expandable_layout_contents"
                 app:el_expanded="false"> <!-- コンテンツ領域: デフォルト表示なし -->
                     <!-- 表示対象コンテンツをここに設定 -->
                </net.cachapa.expandablelayout.ExpandableLayout>
            </androidx.constraintlayout.widget.ConstraintLayout>
        </androidx.cardview.widget.CardView>
    
  • 머리글 영역 = 항상 표시
  • 텍스트 트랙만 = 축소 표시 시 표시
  • 컨텐츠 영역만 = 확대 표시 시 표시
  • 배치를 클릭하면 부제목 영역과 내용 영역의 표시를 전환할 수 있습니다.
    SearchFragment.java
        @BindView(R.id.expandable_layout_search_subtitle) ExpandableLayout layoutSearchSubtitle;
        @BindView(R.id.expandable_layout_contents) ExpandableLayout layoutSearchContents;
    
        @OnClick(R.id.layout_expand_search)
        void onClickSearchArea(View view) {
            layoutSearchSubtitle.toggle(true);
            layoutSearchContents.toggle(true);
        }
    

    만들어진 물건


      

    키워드 선택 대화 상자

  • 소설 검색 화면에서 키워드 지정 버튼을 누르면 키워드 선택 대화상자가 표시됩니다.
  • 는 공식 키워드, 추천 키워드와 대응한다.
  • Chip

  • 화면에서 키워드를 선택할 때 키워드의 UI는 체크박스가 아닌 Chip으로 구현됩니다.
  • Chip은 다음과 같은 특징을 가진 소재로 디자인된 부품입니다(자세한 내용은 참조Material I/O
  • 아이콘, 텍스트, 닫기 단추로 구성된 각원형 단추.
  • 아이콘, 닫기 버튼 선택
  • 각도 조작을 통해 선택 상태를 전환할 수도 있다
  • 그룹을 만들 경우 라디오 버튼
  • 을 사용합니다.

    chip_sample.xml
    <com.google.android.material.chip.Chip
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"/>
    

    FlexboxLayout

  • 화면상의 키워드를 고려할 때 가로화면을 이용할 때 등은 LinerLayout이 아니라 FlexboxLayout을 통해 이루어진다(자동 되돌아오기 위해)
  • Flexbox Layout은 CSS Flexxible Box Layout과 비슷한 레이아웃을 채택하여 Google이 제공하는 library가 되었다.
  • 내용의 폭에 따라 자동으로 되돌아오는 등 유연한 구조 구조를 이용할 수 있다.
  • 는 다음과 같은 상황에서 사용할 수 있습니다(자세한 내용은 github 참조).
  • LinerLayout과 RelativeLayout 대신 XML에서 사용(어떤 것을 말하려면 LinerLayout에 가깝게)
  • RecyclearView
  • 활용
    build.gradle
    dependencies {
        implementation 'com.google.android:flexbox:1.1.0'
    }
    

    만들어진 물건



    RecommendKeywords.xml
    <com.google.android.flexbox.FlexboxLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:flexWrap="wrap"
        app:justifyContent="space_around">
        <com.google.android.material.chip.Chip
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/check_keyword_gag"
        android:text="ギャグ" />
        <!-- 以下チップが並列で並ぶ -->
    </com.google.android.flexbox.FlexboxLayout>
    
    이렇게 된 기분이야.
  • FlexboxLayout에서 "flexWrap="wrap","justifyContent="space around"를 설정하여 한 줄에 국한되지 않으면 다른 줄로 나누어 줄 안의 공간을 평균적으로 분배한다.
  • 총결산

  • Material Components에는 편리한 부품이 많이 준비되어 있습니다.
  • 어떤 부품을 어떤 상황에서 사용하는 것이 좋은지 충분히 이해해야 한다.
  • 좋은 웹페이지 즐겨찾기