Установить текст кнопок, чтобы соответствовать наименьшему размеру текста во всех них Android - PullRequest
2 голосов
/ 29 февраля 2020

Итак, у меня есть макет, состоящий из четырех кнопок, каждая из которых будет иметь различный текст, с помощью android:autoSizeTextType="uniform" и android:maxLines="1" размер текста будет изменяться в соответствии с размерами кнопок. Проблема в том, что кнопки с маленьким текстом кажутся огромными по сравнению с другими (размер текста), мне нужен способ изменить размеры всех текстов до самых маленьких из них, чтобы иметь более цельный дизайн.

Image of the case

1 Ответ

2 голосов
/ 29 февраля 2020
  1. Добавление прослушивателя глобального макета на root макета
  2. Внутри обратного вызова слушателя получите размер текста для каждого Textview
  3. Получите минимум среди этих размеров текста
  4. отключить функцию автоматического размера с помощью TextViewCompat
  5. Установить размер текста для всех текстовых представлений (минимум получен)

      root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            root.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            float txtSize1 = btn1.getTextSize();
            float txtSize2 = btn2.getTextSize();
            float minSize = Math.min(txtSize1, txtSize2);
            TextViewCompat.setAutoSizeTextTypeWithDefaults(btn1, TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE);
            TextViewCompat.setAutoSizeTextTypeWithDefaults(btn2, TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE);
    
            btn1.setTextSize(TypedValue.COMPLEX_UNIT_PX, minSize);
            btn2.setTextSize(TypedValue.COMPLEX_UNIT_PX, minSize);
    
        }
    });
    

Если у вас есть динам c текст в любом из Textviews, то вы не должны удалять глобальный макет слушателя Также, когда текст изменяется, установите AutoSizeTextType на единообразный для всех TextViews и макета запроса вызова на root, пример фрагмента после изменения текста ниже

   TextViewCompat.setAutoSizeTextTypeWithDefaults(btn1, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);

    TextViewCompat.setAutoSizeTextTypeWithDefaults(btn2, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);

    root.requestLayout();
...