Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why button gets bigger when the background is set in android

Tags:

I encountered a problem with the Button view when I set a background to it using the android:background attribute in xml. Before I set the background, the button has its default size. But when I apply a color as a background, it is getting bigger, even though I did not set a different width or height on it.

This is my xml layout before I set background attribute to button

<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> 

So the cancel button is default size like in screenshot.

enter image description here

But when I set a color on the cancel button like this

 <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" /> 

Then the button gets bigger than default size, even though I did not make the width or height bigger.

This is the screenshot

As you can see above the cancel button became bigger. Actually I am setting background color. How can I fix it to get the default size even after I set the background color?

enter image description here

like image 493
Wai Yan Hein Avatar asked Jan 27 '16 17:01

Wai Yan Hein


People also ask

How to remove background of button in android?

adding your_button. setBackgroudResource(0) will remove any predefined backgroud. but it must work as you are applying default theme which you want,If this doesn't work that you have to create brand new button which do not have explicit background defined.

What is ImageButton in android?

Displays a button with an image (instead of text) that can be pressed or clicked by the user. By default, an ImageButton looks like a regular Button , with the standard button background that changes color during different button states.

How to set image on button in android XML?

In android, we can add an image to the button by using <ImageButton> attribute android:src in XML layout file or by using the setImageResource() method. In android, we can create ImageButton control in two ways either in the XML layout file or create it in the Activity file programmatically.

Which attribute is used to change the background color of button in android?

To set Android Button background color, we can assign android:backgroundTint XML attribute for Button in layout file with the required Color Value. To programmatically set or change Android Button background color, we may call pass the method Button.


2 Answers

You have to distinguish between the size of the Button, its width and height, the whole area you can click on, and the image used for displaying the button.

The default button on android has a padding applied to its drawable - it seems like it is smaller. It actually has the same size.

If you make your own drawable and apply no padding, the background will draw within the whole bounds of the view, making it seem bigger.

You can always just use the default button but apply your own color by using AppCompat. This supports tinting the background of the default button.

<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  --> 

...which will let you use the same appearence.

like image 141
David Medenjak Avatar answered Sep 22 '22 15:09

David Medenjak


Use android:backgroundTint attribute in the XML <Button> tag.

Like:

android:backgroundTint="#6567dc"

No need to use <android.support.v7.widget.AppCompatButton> Button.

like image 38
Sankar Behera Avatar answered Sep 19 '22 15:09

Sankar Behera