Snackbar Многострочный текстовый отступ - PullRequest
1 голос
/ 11 октября 2019

К моему удивлению, Snackbar изначально устанавливает дополнительные отступы в TextView, если он занимает несколько строк. Это эффективно удваивает высоту Snackbar, и по какой-то причине влияет только на вертикальное заполнение. Я нашел это в SnackbarContentLayout.onMeasure:

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    if (mMaxWidth > 0 && getMeasuredWidth() > mMaxWidth) {
        widthMeasureSpec = MeasureSpec.makeMeasureSpec(mMaxWidth, MeasureSpec.EXACTLY);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    final int multiLineVPadding = getResources().getDimensionPixelSize(
            R.dimen.design_snackbar_padding_vertical_2lines);
    final int singleLineVPadding = getResources().getDimensionPixelSize(
            R.dimen.design_snackbar_padding_vertical);
    final boolean isMultiLine = mMessageView.getLayout().getLineCount() > 1;

    boolean remeasure = false;
    if (isMultiLine && mMaxInlineActionWidth > 0
            && mActionView.getMeasuredWidth() > mMaxInlineActionWidth) {
        if (updateViewsWithinLayout(VERTICAL, multiLineVPadding,
                multiLineVPadding - singleLineVPadding)) {
            remeasure = true;
        }
    } else {
        final int messagePadding = isMultiLine ? multiLineVPadding : singleLineVPadding;
        if (updateViewsWithinLayout(HORIZONTAL, messagePadding, messagePadding)) {
            remeasure = true;
        }
    }

    if (remeasure) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

Почему Snackbar делает это? Почему это не упоминается вообще в документации? Более того, кажется, что это нельзя переопределить даже после аннулирования представлений и запроса макета. Есть ли способ обойти это без создания собственного представления?

РЕДАКТИРОВАТЬ: Оглядываясь назад на документы по дизайну материалов для Snackbar, есть примеры многослойных снеков без дополнительной вертикальной подкладки, к чему я стремлюсь. Код выше, кажется, подрывает предназначенный дизайн материала для многострочных сообщений. Для справки: https://material.io/components/snackbars/#anatomy

1 Ответ

0 голосов
/ 01 ноября 2019

В настоящее время ( 1.1.0-beta01 и 1.2.0-alpha01 ) не является официальным способом настройки отступа с 2 строками.
Единственный Обходной путь (но он может перестать работать в следующих выпусках) должен быть определен в dimens.xml

<dimen name="design_snackbar_padding_vertical_2lines">14dp</dimen>

или

  <dimen name="design_snackbar_padding_vertical_2lines">@dimen/design_snackbar_padding_vertical</dimen>

До и после:

enter image description here enter image description here

...