I have custom buttons that are supposed to have different backgrounds depending if they are selected or not selected. I want to know if there is a way to state this in the XML file. I have a button for Celsius and a button for Fahrenheit. I want it to work where if one is selected, it stays "pressed" and unable to be clicked, while the other button can be pressed.
<Button
android:id="@+id/celsiusButton"
android:text="C"
android:background="@drawable/button_unpressed_shape"
android:layout_weight="3"
android:layout_height="match_parent"
android:layout_width="0dip"
android:gravity="center" />
<Button
android:id="@+id/fahrenheitButton"
android:text="F"
android:background="@drawable/button_unpressed_shape"
android:layout_weight="3"
android:layout_height="match_parent"
android:layout_width="0dip"
android:gravity="center" />
The Celsius button is defaulted to selected. I try working on it like this in my code, but it just seems to messy:
tempText = (TextView) findViewById( R.id.temperatureId );
celsiusButton = (Button) findViewById( R.id.celsiusButton );
celsiusButton.setBackgroundDrawable( getResources().getDrawable( R.drawable.button_pressed_shape ) );
celsiusButton.setClickable( false );
celsiusButton.setOnClickListener( new OnClickListener() {
public void onClick(View v) {
if( hasRead ) {
celsiusButton.setBackgroundDrawable( getResources().getDrawable( R.drawable.button_pressed_shape ) );
celsiusButton.setClickable( false );
fahrenheitButton.setBackgroundDrawable( getResources().getDrawable( R.drawable.button_unpressed_shape ) );
fahrenheitButton.setClickable( true );
temperature = ( ( ( temperature - 32 ) * 5 ) / 9 );
tempText.setText( Double.toString( temperature ).substring( 0, ( Double.toString( temperature ).length() - 2 ) ) + " C" );
}
}
});
fahrenheitButton = (Button) findViewById( R.id.fahrenheitButton );
fahrenheitButton.setOnClickListener( new OnClickListener() {
public void onClick( View v ) {
if( hasRead ) {
fahrenheitButton.setBackgroundDrawable( getResources().getDrawable( R.drawable.button_pressed_shape ) );
celsiusButton.setBackgroundDrawable( getResources().getDrawable( R.drawable.button_unpressed_shape ) );
celsiusButton.setClickable( true );
fahrenheitButton.setClickable( false );
temperature = ( ( temperature * 9 ) / 5 ) + 32;
tempText.setText( Double.toString( temperature ).substring( 0, ( Double.toString( temperature ).length() - 2 ) ) + "° F" );
}
}
});
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.
Android Colored Buttons The Colored Button takes the color of the colorAccent attribute from the styles. xml file. Change the color of colorAccent to one of your choice to get the desired background color. Now, there are two important attributes to style a button : colorButtonNormal : The normal color of the button.
Create background color. By default each activity in Android has a white background. To change the background color, first add a new color definition to the colors. xml file in the values resource folder like the following.
How to set Background of button in Android programmatically? setBackgroundResource() method is used to change the button background programmatically. setBackgroundResource(int id) accepts id of drawable resource and applies the background to the button.
To change background image:
public void onClick(View v) {
if(v == ButtonName) {
ButtonName.setImageResource(R.drawable.ImageName);
}
}
Or, using an XML file:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/login_selected" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/login_mouse_over" /> <!-- focused -->
<item android:drawable="@drawable/login" /> <!-- default -->
</selector>
In OnClick, just add this code:
ButtonName.setBackgroundDrawable(getResources().getDrawable(R.drawable.ImageName));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With