簡體   English   中英

如何更改未單擊的按鈕的背景色?

[英]How to change the background color of a button that wasn't clicked?

我的目標是每次單擊Button背景色會恢復為默認顏色,並且單擊的Button會更改顏色。 我希望在JAVA做到這一點,我認為for循環是可行的方法,但是我不確定如何編輯未單擊的Button

這是我的XML

    <Button
    android:id="@+id/but1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusableInTouchMode="true"
    android:background="@drawable/background_selector"
    android:onClick="buttonOn"
    android:text="Button 1" />
<Button
    android:id="@+id/but2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusableInTouchMode="true"
    android:background="@drawable/background_selector"
    android:onClick="buttonOn"
    android:text="Button 2" />
<Button
    android:id="@+id/but3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusableInTouchMode="true"
    android:background="@drawable/background_selector"
    android:onClick="buttonOn"
    android:text="Button 3" />

這是我的選擇器

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/background_blue"
    android:state_pressed="true"/>

<item android:drawable="@drawable/background_blue"
    android:state_focused="true"/>

<item android:drawable="@drawable/background_white"/>
</selector>

這是background_white

<solid android:color="@android:color/white" />
<padding
    android:bottom="1dp"
    android:left="1dp"
    android:right="1dp"
    android:top="1dp" />
</shape>

這是background_blue

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/holo_blue_bright" />
<padding
    android:bottom="1dp"
    android:left="1dp"
    android:right="1dp"
    android:top="1dp" />
</shape>

這是我的java代碼

public class MainActivity extends AppCompatActivity {
    Button but1;
    Button but2;
    Button but3;
    Button but4;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        but1 = (Button) findViewById(R.id.but1);
        but2 = (Button) findViewById(R.id.but2);
        but3 = (Button) findViewById(R.id.but3);
        but4 = (Button) findViewById(R.id.but4);
    }

    public void buttonOn(View v) {
        Fragment view;
        switch(v.getId()) {
            case R.id.but1:
                Log.i("Button 1", "pressed");
                break;
            case R.id.but2:
                Log.i("Button 2", "pressed");
                break;
            case R.id.but3:
                Log.i("Button 3", "pressed");
                break;
            case R.id.but4:
                Log.i("Button 4", "pressed");
                break;
        }
    }

將背景作為可繪制的選擇器添加到按鈕。還添加android:focusableInTouchMode =“ true”以使按鈕在按下時可以觸摸。

<Button
    android:id="@+id/but1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusableInTouchMode="true"
    android:background="@drawable/background_selector"
    android:onClick="buttonOn"
    android:text="Button 1" />

然后在background_selector內部為選中和未選中的按鈕添加兩個可繪制對象

background_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/background_blue"
android:state_pressed="true"/>

    <item android:drawable="@drawable/background_blue"
android:state_focused="true"/>

    <item android:drawable="@drawable/background_white"/>
</selector>

然后將background_white和background_blue添加到drawable文件夾

background_white.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="@android:color/white" />

    <padding
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="1dp" />
</shape>

background_blue.xml

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="@android:color/holo_blue_bright" />

   <padding
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="1dp" />
</shape>
public void changeButtonColors(ViewGroup layout, int clickedButton_id) {
    for (int i = 0; i < layout.getChildCount(); i++) {
            View v = layout.getChildAt(i);
            if (v instanceof Button) {
                if (v.getId() == clickedButton_id){
                    ((Button)v).setBackgroundColor(Color.RED);
                }else{
                    ((Button)v).setBackgroundColor(Color.BLUE);
                }
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM