Search code examples
androidbuttonbackground-color

Change background color of the selected button basing on its state


I saw some posts with a similar question but they still differ from my problem here. I am making painting app in Android Studio and I want to indicate the option which user selected (whether it is move tool, pencil etc.) Here is the picture:

Screenshot

So, I want to change the background color of the button when it is selected and revert it back to default color when another button is selected.
I tried doing it with XML selector but later I saw that there is now "selected" attribute for a regular button. These are regular buttons. What is the easiest way to solve this?


Solution

  • You could use a class variable for keeping track of the currently selected button, and detect when a new button is selected. You would then perform the action of "selecting" the new button, and "deselecting" the previous one. Example:

    private Button mSelectedButton;
    
    private void setOnClickListeners() {
        View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Button clickedButton = (Button) view;
    
                //in case no button is selected, this will only "select" the clickedButton
                if (mSelectedButton == null) mSelectedButton = clickedButton;
    
                //previous selected button (should return to original state)
                mSelectedButton.setBackgroundColor(R.color.original_state);
    
                //your new selected button
                clickedButton.setBackgroundColor(R.color.selected_state);
    
                mSelectedButton = clickedButton; //save currently selected button
            }
        };
    
        yourButton1.setOnClickListener(listener);
        yourButton2.setOnClickListener(listener);
        yourButton3.setOnClickListener(listener);
        ...
    }