Можно ли установить вертикальную ориентацию Material ChipGroup?

Я динамически добавляю материал ChipGroup в родительский линейный макет, для которого установлена ​​вертикальная ориентация, но элементы чипа, кажется, добавляются горизонтально. Есть ли способ сделать так, чтобы элементы чипа располагались вертикально?

Метод setLayoutDirection() метода класса ChipGroup не принимает никаких параметров, поддерживающих ВЕРТИКАЛЬНУЮ ориентацию.


person Niaz Ahmed    schedule 05.02.2019    source источник
comment
myCusstomView.setRotation(45); ты пробовал это   -  person vikas kumar    schedule 05.02.2019
comment
setlayoutdirection используется для настроек rtl.   -  person karan    schedule 05.02.2019
comment
@vikas kumar setRotation вращает весь контейнер ChipGroup   -  person Niaz Ahmed    schedule 05.02.2019


Ответы (2)


Нет, с помощью ChipGroup это невозможно. ChipGroup расширяет простой FlowLayout, который был разработан для размещения элементов рядом друг с другом (а затем в другой строке). Вы можете найти ChipGroup здесь: https://github.com/material-components/material-components-android/blob/master/lib/java/com/google/android/material/chip/ChipGroup.java

FlowLayout не так сложен. На вашем месте я бы просто скопировал исходники и изменил FlowLayout.onLayout(), чтобы дочерние элементы располагались вертикально. Если вам не нужны дополнительные функции (например, отслеживание выбора), вы можете просто использовать FlowLayout без изменения ChipGroup. Если вам нужен действительно простой стек чипов, вы можете просто использовать вертикальный LinearLayout.

person Zielony    schedule 06.02.2019
comment
В качестве альтернативы вы можете включить в свой проект github.com/google/flexbox-layout и использовать FlexboxLayout много Chip детей; FlexboxLayout — это более мощный FlowLayout, который позволяет указать ориентацию. - person Ben P.; 07.02.2019
comment
@Zielony спасибо. Я посмотрел источники ChipGroup. я бы применил ваше предложение - person Niaz Ahmed; 09.02.2019
comment
@БенП. Никогда раньше не использовал FlexBoxLayout. Кажется полезным. Попробую это в будущем. - person Niaz Ahmed; 09.02.2019

вы можете установить width = match_parent в каждом элементе Chip

<com.google.android.material.chip.ChipGroup
        android:id="@+id/chipGroup"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="24dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="24dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/questionTxt">

        <com.google.android.material.chip.Chip
            android:id="@+id/opt1"
            style="@style/Widget.MaterialComponents.Chip.Choice"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Fire" />

        <com.google.android.material.chip.Chip
            android:id="@+id/opt2"
            style="@style/Widget.MaterialComponents.Chip.Choice"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Water" />

        <com.google.android.material.chip.Chip
            android:id="@+id/opt3"
            style="@style/Widget.MaterialComponents.Chip.Choice"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Psychic" />

        <com.google.android.material.chip.Chip
            android:id="@+id/opt4"
            style="@style/Widget.MaterialComponents.Chip.Choice"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Psychic" />
    </com.google.android.material.chip.ChipGroup>

окончательный макет

person Ahmed Nafea    schedule 04.09.2019