如何在Android Studio中通过按钮点击更改按钮颜色

3

我创建了一个背景色为黑色的按钮。当我点击它时,我希望它的颜色只在我手指按住它的时间内改变为绿色,即我保持对它的关注。


请提供您所完成的工作,并展示您遇到问题的地方。 - Flummox - don't be evil SE
请看这里:https://dev59.com/MHI_5IYBdhLWcg3wHfOr#1726352 - Ugurcan Yildirim
1
这是一个关于编程的问题,以下是清晰的答案:https://dev59.com/CG865IYBdhLWcg3wTczg - JhesterMag
4个回答

5
在您的按钮中使用选择器。
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" android:layout_width="fill_parent"
    android:gravity="center" android:focusable="true"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:background="@android:drawable/list_selector_background" />

这里是list_selector_background 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/green"/> <!-- pressed -->
    <item android:state_focused="true" android:drawable="@color/blue"/> <!-- focused -->
    <item android:drawable="@color/black"/> <!-- default -->
</selector>

2

您需要使用 onTouchListener 监听用户按下按钮(ACTION_DOWN)和释放按钮(ACTION_UP)的操作。

b.setOnTouchListener(new OnTouchListener() { 

public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_UP) {
       // reset the background color here
        b.setBackgroundColor(Color.GREEN);

    }else{ 
       // Change the background color here 
        b.setBackgroundColor(Color.RED);

    } 
    return false; 
   } 
}); 

我们可以使用多种颜色/可绘制对象来创建选择器可绘制对象,以代替像这样注册触摸事件。 - seema

0
ACTION_UP --> 一个按下的手势已经结束,该动作包含最终释放的位置以及自上次按下或移动事件以来的任何中间点。
ACTION_DOWN --> 一个按下的手势已经开始,该动作包含初始起始位置。
您应该在按钮上设置一个OnTouchListener。
button.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            btn.setBackgroundColor(getResources().getColor(R.color.colorAccent));
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            btn.setBackgroundColor(getResources().getColor(R.color.white));
        }
    }
};

检查运动事件


由于getColor()已被弃用,您可以使用btn.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));@Diptangsu Goswami。 - Amit Vaghela

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/green"/> 
<item android:drawable="@color/black"/>
</selector>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接