#android #xml #button #size
#Android #xml #кнопка #размер
Вопрос:
У меня есть пара кнопок, которые должны быть квадратными. Но я не могу установить высоту такой же, как ширина. Как мне это сделать?
Я пытался решить проблему с помощью layout_constraintDimensionRatio, но это не сработало, высота была просто 0.
Это код:
<Button
android:id="@ id/grid_11"
style="@style/Widget.AppCompat.Button.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"></Button>
И это то, что я попробовал:
<Button
android:id="@ id/grid_11"
style="@style/Widget.AppCompat.Button.Small"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
android:layout_weight="1"></Button>
Ответ №1:
Причина, по которой высота была «0», заключается в том, что вы неправильно установили ограничения для своей кнопки. Установите надлежащие ограничения, как показано ниже, и это сработает.
<Button
android:id="@ id/grid_11"
style="@style/Widget.AppCompat.Button.Small"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintDimensionRatio="1:1"/>
Комментарии:
1. Примечание: это сработало бы, только если родительский вид является ContraintLayout
Ответ №2:
Этого можно достичь, используя значения из файла dimens. Если ее нет в res/values
папке, то создайте там XML-файл с именем dimens.xml
file. Затем добавьте значение dimen, указывающее ваше значение, которое вы хотите использовать для высоты и ширины кнопки:
<dimen name="btn_size">100dp</dimen>
Затем вы можете указать ее для кнопки следующим образом:
<Button
android:id="@ id/grid_11"
style="@style/Widget.AppCompat.Button.Small"
android:layout_width="@dimen/btn_size"
android:layout_height="@dimen/btn_size"
android:layout_weight="1"></Button>
Это добавит кнопке ту же ширину высоты.
Комментарии:
1. Но что, если я не хочу, чтобы кнопка имела определенный размер? Я хочу, чтобы он вписывался в макет, поэтому ширина должна оставаться match_parent .
Ответ №3:
Изменить-
android:layout_width="wrap_content"
android:layout_height="wrap_content"
Для-
android:layout_width="@dimen/square_button_size"
android:layout_height="@dimen/square_button_size"
и добавить
<dimen name="square_button_size">50dp</dimen>
в res/values/dimen.xml
Ответ №4:
Если вы не хотите помещать ее в ConstraintLayout (что является самым простым ответом, @SirkarReddy уже предлагал это) — подкласс Button и переопределите функцию onMeasure, чтобы она всегда измеряла себя как квадрат. Нет встроенного способа получить желаемое поведение в RelativeLayout или LinearLayout без некоторого взлома кода.