Как я могу ограничить область элементов чипа (область переноса) до 2 строк максимум внутри ChipGroup? - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь реализовать ChipGroup с некоторыми элементами chip внутри. Который пока работает нормально. Но я должен показать эти элементы внутри ChipGroup с определенным количеством строк. Например: у меня в группе 20 предметов в виде фишки, и между двумя строками помещается только 6/7 предметов. Итак, я хочу показать чипы, которые вписываются в ChipGroup только между 2 строками.

В настоящее время я получаю этот (пример) вывод:

current situation

И мои ожидания примерно такие:

expected ouput

Дополнительные запросы :

  • Возможно ли получить текущее количество строк чиповых предметов из
    ChipGroup? Если да, то как?
  • Можно ли программно установить максимально видимые строки для ChipGroup?

1 Ответ

0 голосов
/ 19 февраля 2020

Я использую вид клиента, чтобы сделать эту функцию.

public class AppChipGroup extends ChipGroup {

    private static final int[] MAX_HEIGHT_ATTRS = {android.R.attr.maxHeight};

    private int mMaxHeight = Integer.MAX_VALUE;

    public AppChipGroup(Context context) {
        super(context);
    }

    public AppChipGroup(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public AppChipGroup(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray typedArray = context.obtainStyledAttributes(attrs, MAX_HEIGHT_ATTRS);
        mMaxHeight = typedArray.getDimensionPixelSize(0, Integer.MAX_VALUE);
        typedArray.recycle();
    }

    @SuppressLint("RestrictedApi")
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int height = Math.min(getMeasuredHeight(), mMaxHeight);
        setMeasuredDimension(getMeasuredWidth(), height);
    }

}

, затем при использовании ChipGroup установите значение maxHeight.

<packagename.chip.AppChipGroup
    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"
    style="@style/Widget.MaterialComponents.ChipGroup"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:maxHeight="@dimen/search_input_history_max_height"
    app:chipSpacing="@dimen/search_input_history_chip_space" />

Или вы можете получить высоту чипа и рассчитать max_height в onMeasure метод и установите размер меры.

...