Почему кнопка становится больше, когда фон установлен в android

Я столкнулся с проблемой с представлением Button когда я устанавливаю фон для него, используя атрибут android:background в xml. Перед установкой фона кнопка имеет свой размер по умолчанию. Но когда я применяю цвет в качестве фона, он становится все больше, хотя я не устанавливал на нем другую width или height .

Это мой xml-макет, прежде чем я установлю фоновый атрибут на кнопку

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:background="@color/white" android:layout_gravity="center_horizontal" android:id="@+id/btn_row_option_done" android:text="Done" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:background="@color/white" android:layout_gravity="center_horizontal" android:text="Edit" android:id="@+id/btn_row_option_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:layout_gravity="center_horizontal" android:text="Delete" android:id="@+id/btn_row_option_delete" android:background="@color/red" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:layout_gravity="center_horizontal" android:text="Cancel" android:id="@+id/btn_row_option_cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 

Таким образом, кнопка отмены является размером по умолчанию, как на снимке экрана.

Введите описание изображения здесь

Но когда я устанавливаю цвет на кнопке отмены, как это

  <Button android:background="@color/white" android:layout_gravity="center_horizontal" android:text="Cancel" android:id="@+id/btn_row_option_cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

Тогда кнопка становится больше, чем размер по умолчанию, хотя я не делал ширину или высоту больше.

Это скриншот

Как вы можете видеть выше, кнопка отмены стала больше. На самом деле я устанавливаю цвет фона. Как я могу исправить его, чтобы получить размер по умолчанию, даже после того, как я установил цвет фона?

Введите описание изображения здесь

Вы должны различать размер Button , ее ширину и высоту, всю область, на которую вы можете щелкнуть, и изображение, используемое для отображения кнопки.

Кнопка по умолчанию на android имеет отступы, применяемые к ее drawable – кажется, что она меньше. Он фактически имеет тот же размер.

Если вы сделаете свой собственный drawable и не применяете прописку, фон будет рисоваться во всех границах представления, делая его больше.

Вы всегда можете использовать кнопку по умолчанию, но применять свой собственный цвет с помощью AppCompat. Это поддерживает тонирование фона кнопки по умолчанию.

 <android.support.v7.widget.AppCompatButton xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="wrap_content" app:backgroundTint="#ffaa00"/> <!-- <--- Your color here --> 

… который позволит вам использовать ту же самую видимость.

Использовать атрибут android:backgroundTint в <Button> XML <Button> .

Подобно:

android:backgroundTint="#6567dc"

Не нужно использовать кнопку <android.support.v7.widget.AppCompatButton> .

Это потому, что вы используете обертку содержимого для widht и height.

У вас есть несколько вариантов. Быстрый и простой способ? Задайте значение кнопок, определяющих размер в DP, например:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:background="@color/white" android:layout_gravity="center_horizontal" android:id="@+id/btn_row_option_done" android:text="Done" android:layout_width="200dp" android:layout_height="200dp" /> <Button android:background="@color/white" android:layout_gravity="center_horizontal" android:text="Edit" android:id="@+id/btn_row_option_edit" android:layout_width="200dp" android:layout_height="200dp" /> <Button android:layout_gravity="center_horizontal" android:text="Delete" android:id="@+id/btn_row_option_delete" android:background="@color/red" android:layout_width="200dp" android:layout_height="200dp" /> <Button android:layout_gravity="center_horizontal" android:text="Cancel" android:id="@+id/btn_row_option_cancel" android:layout_width="100dp" android:layout_height="100dp" /> </LinearLayout>