2017-09-26 241 views
1

我试图在单击时更改Button的背景颜色,当我释放Button时按下Button时,我可以更改背景颜色该按钮返回到默认值颜色。我不知道该从哪里出发,我一直在试图找到解决这个问题的办法。Android单击后更改背景颜色

`

<?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> 
+1

是否必须通过XML?否则,您可以使用按钮OnClickListener。 –

回答

0

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

android:focusableInTouchMode="true" 
0

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

编辑:

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

0

尝试这样的:

<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" /> 

0

试试这个


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

竭诚为您服务

2

这是在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,只要单击按钮就会做出反应。从这里我们将按钮背景颜色更改为黑色。如果您希望每次点击都随时更改,则可以应用更多逻辑。

+0

我喜欢试图使用Java的想法, – morefaster

+0

我喜欢试图使用Java的想法,我是新来的Android,我敢肯定我在这里失去了一些东西,但我不知道是什么,onClick看起来像这样** onClick =“mButton”; **。我是否应该编辑问题中的代码以反映我的更新代码,或者在这里认为是不好的形式? – morefaster

+0

我给你的代码就是你需要的一切,下面的文字只是对代码的描述。我认为这是最简单的,如果你在你的文章底部添加一个**编辑:**,并把你的新代码放在那里。 –

0

你试过这个吗?

myButton.setBackgroundColor(Color.RED); 

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

0

,如果你wan't重置按钮的背景颜色为默认不是使用下面的代码试试这个

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); 
0

正确的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>` 

你不能集中所有的事实。