按钮 – 单击更改背景颜色

我的活动中有8个按钮。 我正在寻找的是,按钮具有默认背景,当单击按钮时,背景颜色应该更改为其他颜色。 这部分非常简单。 但是,当我点击任何其他按钮时,第一个按钮的背景颜色应该变回默认颜色。 我知道这将使用“选择器状态”完成,但我不太清楚如何实现它。 我读的越多,我就越困惑。

现在,我拥有的xml如下:在drawable文件夹中

      

xml中的drawable / image_border用于定义按钮的形状。 下面是image_border.xml

       

有人可以帮助我如何更改xml以我需要的方式行事吗?

[编辑1]

以下所有答案都指向类似的解决方案。 以下是我所做的更改。 但是,当我按下按钮时,它会转到指定的颜色,但会立即返回默认颜色。

button_background_blue.xml

       

image_border_blue.xml

       

有什么想法吗?

创建一个名为button_pressed.xml的形状,如下所示….

      

假设你有拖车按钮,其idR.id.btnR.id.btn1如下……

     

写下onClick()方法如下…这将允许您保留更改的颜色,直到按下另一个按钮。

 Button button; public void onClick(View v) { Drawable dr = getResources().getDrawable(R.drawable.button_pressed); dr.setColorFilter(Color.parseColor("#FF0000"), PorterDuff.Mode.SRC_ATOP); switch (v.getId()) { case R.id.btn: if (button == null) { button = (Button) findViewById(v.getId()); } else { button.setBackgroundResource(R.drawable.button_pressed); button = (Button) findViewById(v.getId()); } button.setBackgroundDrawable(dr); break; case R.id.btn2: if (button == null) { button = (Button) findViewById(v.getId()); } else { button.setBackgroundResource(R.drawable.button_pressed); button = (Button) findViewById(v.getId()); } button.setBackgroundDrawable(dr); break; default: break; } } 

我想,现在你会得到你想做的事。

使用此选择器并将其放在可绘制文件夹中并将按钮背景设置为此选择器。

       

或者您可以使用颜色而不是背景。 希望能帮助到你。

我建议你这个选择器。

只需在drawable文件夹中创建一个简单的selector.xml文件,然后将选择器添加到按钮中,如android:background="@drawable/selector"或类似代码: yourButton.setBackground(getResources().getDrawable(R.drawable.selector));

selector.xml

        

第一项用于pressed ,第二项用于focused ,最后一项用于selected状态。

在android中单击相应的颜色按钮时,在布局中更改背景颜色

main_layout.xml

      

MyActivity.java

 package ram.android.com.cwp1; import android.app.Activity; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import com.google.android.gms.appindexing.Action; import com.google.android.gms.appindexing.AppIndex; import com.google.android.gms.common.api.GoogleApiClient; /** * Created by VENKATESH on 10-Jun-16. */ public class MyActivity extends Activity implements View.OnClickListener { /** * ATTENTION: This was auto-generated to implement the App Indexing API. * See https://g.co/AppIndexing/AndroidStudio for more information. */ Button r, g, b; LinearLayout ll; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); ll = (LinearLayout) findViewById(R.id.l1); r = (Button) findViewById(R.id.b1); g = (Button) findViewById(R.id.b2); b = (Button) findViewById(R.id.b3); r.setOnClickListener(this); g.setOnClickListener(this); b.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.b1: ll.setBackgroundColor(Color.RED); break; case R.id.b2: ll.setBackgroundColor(Color.GREEN); break; case R.id.b3: ll.setBackgroundColor(Color.BLUE); break; } } } 

我知道现在已经很晚了,但我希望有人会觉得有用。 我有一个非常简单的解决方案,我已经在我的应用程序中使用并且工作得很棒。

让我解释一下逻辑,1。跟踪2个按钮点击 – 单击上一个按钮并单击当前按钮。 我正在使用ArrayList 2.对于每个按钮单击继续更新ArrayList中的上一个和当前按钮单击值。 3.更改单击上一个按钮的背景颜色。 4.更改当前按钮的背景颜色。

我希望逻辑简单明了。

这是实施

XML

  

为XML中的每个按钮定义了OnClick方法,在示例中它是onClickRosterDay

Java的

  //buttons Button rosterMonday; Button rosterTuesday; Button rosterWednesday; Button rosterThursday; Button rosterFriday; Button rosterSaturday; //ArrayList to track button clicks private ArrayList