Android 单击时更改背景颜色

Android Change background color when clicked

我试图在单击时更改 Button 的背景颜色,我可以在按下 Button 时更改背景颜色,然后释放 [=13] =] 按钮 returns 到它的默认颜色。我不确定从这里去哪里我一直在努力寻找解决这个问题的方法。

`

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

在您的可绘制对象中,最后一个 <item> 表示默认状态。改变那个。

编辑:

对不起,我理解错了。您必须在 Java 或 Kotlin 中执行此操作,无论您使用哪个。这比 "view".

更多的业务逻辑

这样试试:

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

很高兴为您提供帮助

这里是 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,而不是在单击按钮时做出反应。从这里我们将按钮背景颜色更改为黑色。如果你希望它随着每次点击而改变,你可以应用更多的逻辑。

你试过了吗?

myButton.setBackgroundColor(Color.RED);

此代码在您的 onClick 方法中。

试试这个

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

NOTE if you wan't to reset a button's background color to default than use below code

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

这是因为默认情况下,当触摸按钮时,它会点击而不是 focus.If 您希望按钮聚焦并在按下时更改其颜色将此添加到 xml 中的按钮。

android:focusableInTouchMode="true"

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

你不能全神贯注。