Android单击时更改背景颜色

我试图改变一个Button的背景颜色,点击时,我可以改变背景颜色,当我按下Button时,我释放Button按钮返回到它的默认颜色。 我不知道从哪里去,我一直在试图找到解决这个问题的方法。

`

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.game.dice.MainActivity"> <Button android:id="@+id/but1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button 1" android:background="@drawable/button_color" /> <Button android:id="@+id/but2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button 2" android:background="@drawable/button_color"/> </LinearLayout> 

`

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@color/button_pressed"/> <item android:state_focused="true" android:drawable="@color/button_focused"/> <item android:drawable="@color/button_default"/> </selector> 

这是因为默认情况下,当按钮被触摸,它将采取点击,而不是焦点。如果你想要按钮被聚焦,并改变它的颜色时按下这个添加到您的按钮在XML。

 android:focusableInTouchMode="true" 

这里是一个在Java中的快速设置如何做到这一点;

 private Button mButton; mButton = (Button) findViewById(R.id.but1); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mButton.setBackgroundColor(Color.BLACK); } }); 

你基本上做一个ClickListener,而不是每当点击按钮时作出反应。 从这里我们将按钮背景颜色更改为黑色。 如果你希望每次点击都改变,你可以应用更多的逻辑。

在你的drawable中,最后一个<item>表示默认状态。 改变这一点。

编辑:

对不起我错了。 无论你使用什么,你都必须在Java或Kotlin中执行此操作。 这是更多的业务逻辑,而不是“观点”。

尝试像这样:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:state_pressed="false" android:color="@color/button_pressed" /> <item android:state_focused="true" android:state_pressed="true" android:color="@color/button_pressed" /> <item android:state_focused="false" android:state_pressed="true" android:color="@color/button_default" /> <item android:color="@color/button_pressed" /> 

试试这个


 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Non focused states --> <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/on_the_go" android:color="@color/colorText" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/on_the_go_selected" android:color="@color/colorSkyBlue"/> <!-- Focused states --> <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/on_the_go" android:color="@color/colorText"/> <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/on_the_go_selected" android:color="@color/colorSkyBlue"/> <!-- Pressed --> <item android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/on_the_go" android:color="@color/colorText"/> <item android:state_pressed="true" android:drawable="@drawable/on_the_go_selected" android:color="@color/colorSkyBlue" /> </selector> 

很高兴帮助你

你试过这个吗?

 myButton.setBackgroundColor(Color.RED); 

此代码位于您的onClick方法中。

尝试这个

 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { button.setBackgroundColor(ContextCompat.getColor(getActivity(),R.color.colorBlack)); } }); 

注意如果您不想将按钮的背景颜色重置为默认值,则使用下面的代码

 button.setBackgroundResource(android.R.drawable.btn_default); 

正确的XML是:

 `<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@color/button_pressed"/> <item android:state_focused="false" android:drawable="@color/button_focused"/> <item android:drawable="@color/button_default"/> </selector>` 

你不能集中精力