Android - изменить размер текста кнопки при изменении ориентации - PullRequest
0 голосов
/ 22 января 2020

У меня есть кнопка (это кнопка Bootstrap, основанная на com.beardedhen: androidbootstrap).

Это ширина и высота макета в файле xml:

android:layout_width="0dp"
android:layout_height="wrap_content"

Я хочу изменить размер текста кнопки, когда меняется ориентация (и также зависеть от различных размеров экрана).

Причина, по которой я хочу это сделать Это связано с тем, что в альбомной ориентации кнопка больше, чем в портретной.

DisplayMetrics dm = new DisplayMetrics();
float height = dm.heightPixels;
float width = dm.widthPixels;
BootstrapButton btn = findViewById(R.id.btn);
float density = getResources().getDisplayMetrics().density;
btn.setTextSize((width / density) / 32);

Код вычисляет ширину и высоту экрана и соответственно устанавливает размер текста. Таким образом, я получаю правильный размер текста на основе экрана устройства и его ориентации (где ширина становится высотой и наоборот).

Проблема заключается в том, что этот код не работает при изменении ориентации .

Чего мне не хватает?

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 22 января 2020

Хотя я не думаю, что это лучший подход, ConstraintLayouts может помочь автоматически управлять шириной. Но если вы хотите придерживаться этого подхода, попробуйте следующее: вместо onCreate попробуйте сделать это в onConfigurationChanged. Что-то вроде: Класс активности

override fun onConfigurationChanged(newConfig: Configuration?) {
    super.onConfigurationChanged(newConfig)

    if (newConfig?.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // Do Landscape calculation
    }
    else {
        // Do Portrait calculation
    }
}

AndroidManifest. xml <activity android:name="[.YourActivity]" android:configChanges="orientation|keyboardHidden|screenSize" />

0 голосов
/ 22 января 2020

Вы должны прочесть Android Макет ограничения . Внутри редактора макетов вы можете указать ограничения для своей кнопки и определить, как она должна выглядеть при разных макетах и ​​размерах экрана.

Также будьте осторожны, в то время как написанный код может работать, выполняя ручные вычисления плотности экрана. это опасная и хитрая задача, и ее следует избегать, если это возможно. По этой причине Android использует dp вместо px. Код, который вы написали, следует использовать в случаях, которые необходимо преобразовать между px и dp, или в других сложных случаях. Нечто подобное изменению размера кнопок в зависимости от размера экрана встречается крайне часто, и Android предоставляет способы сделать это прямо в редакторе макетов.

...