Как изменить размеры кнопок в GridLayout пропорционально размеру экрана телефона?
Имеется вертикальный GridLayout с четырьмя кнопками. На экранах устройств с разрешениями 1080x1920 и 720x1280 все отображается нормально. Но если запустить приложение на устройстве с разрешением, например, 480x800, то эти кнопки будут слишком огромными. Можно ли как-то программно изменять размеры кнопок и текста в них, в зависимости от размеров экрана?
xml-разметка:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView3">
<Button
android:id="@+id/button1"
android:layout_width="150dp"
android:layout_height="65dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:background="@drawable/button1"
android:text="@string/text1"
android:textSize="16sp"
android:visibility="visible"
tools:ignore="MissingConstraints" />
<Button
android:id="@+id/button2"
android:layout_width="150dp"
android:layout_height="65dp"
android:layout_marginTop="40dp"
android:background="@drawable/button2"
android:text="@string/text2"
android:textSize="16sp"
android:visibility="visible"
tools:ignore="MissingConstraints" />
<Button
android:id="@+id/button4"
android:layout_width="150dp"
android:layout_height="65dp"
android:layout_marginTop="40dp"
android:background="@drawable/button2"
android:text="@string/text4"
android:textSize="16sp"
android:visibility="visible"
tools:ignore="MissingConstraints" />
<Button
android:id="@+id/button3"
android:layout_width="150dp"
android:layout_height="65dp"
android:layout_marginTop="40dp"
android:background="@drawable/button1"
android:text="@string/text3"
android:textSize="16sp"
android:visibility="visible"
tools:ignore="MissingConstraints" />
</LinearLayout>
Ответы (1 шт):
Перестаньте задавать размеры ваших кнопок хардкодом. Т.е. вы должны максимально избегать ситуаций когда вы жестко фиксируете размер ваших кнопок.
В вашем LinearLayout вы можете задать размер кнопки 0dp и выставить ей весы android:layout_weight например вы можете каждой кнопке задать одинаковый вес (1) и они все будут равны и растянуться по всей ширине экрана (исключая отступы margins). Или же вы можете задать например им вес 20, 30, 50 и тогда первая кнопка будет занимать 20% экрана, вторая и третья соответственно 30% и 50%.
Не совсем понятно почему