Как мне установить высоту моей кнопки, чтобы она совпадала с шириной?

#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 без некоторого взлома кода.