2017-09-28 247 views
0

我的目標是每次點擊一個按鈕時,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; 
     } 
    } 
+0

你得到什麼將上述代碼的輸出? – Ankita

+1

您可以通過ID選擇未點擊的按鈕並設置背景。 –

+0

我已將代碼更新爲我目前正在使用的代碼,但我擔心JAVA中的日誌功能需要兩次按鈕單擊才能打印文本。點擊一個按鈕可以做什麼來完成日誌打印? – morefaster

回答

1

添加背景的繪製選擇到button.Also添加機器人: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添加到可拉伸夾

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

我試過這個代碼了,但是當我在模擬器上運行它時,按鈕不顯示任何想法? – morefaster

+0

我能夠得到此代碼的工作,但我有一個後續問題。爲什麼在從java文件打印log.i之前必須點擊兩次按鈕?我會更新我的主要代碼。 – morefaster

+0

喜歡什麼?你無法點擊按鈕? – Anonymous

0
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); 
       } 
      } 
     } 
    } 
相關問題