Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 触摸物品时如何设置自定义背景色?_Java_Android_Background Color - Fatal编程技术网

Java 触摸物品时如何设置自定义背景色?

Java 触摸物品时如何设置自定义背景色?,java,android,background-color,Java,Android,Background Color,我基本上想在触摸列表项时自定义其背景色。我写了一篇很累的听众文章,但是我犯了一些错误或者误解了这些行为的概念 v.setOnTouchListener( new TextView.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN:

我基本上想在触摸列表项时自定义其背景色。我写了一篇很累的听众文章,但是我犯了一些错误或者误解了这些行为的概念

v.setOnTouchListener( new TextView.OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                v.setBackgroundColor(Color.RED); 
                    break;
            case MotionEvent.ACTION_UP:
                v.setBackgroundColor(Color.WHITE);
                break;
            }

    return false;
    }
}
);
默认颜色为浅蓝色。我想为每个列表项更改它。
此代码在触摸时将项目颜色更改为红色,但之后不会再更改。

使用statelistdrawable。你可以在所有地方找到例子,包括Android开发者网站。

你是否也尝试捕获
操作\u取消

所以


我认为ListView正在感知触摸事件,因为它开始滚动。因此,您永远不会得到一个up操作,而是一个cancel操作(我假设)。

但最好使用颜色状态…在color文件夹中创建一个文件mycolors.xml,其中包含以下内容:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true"
              android:color="#ff0000"/> <!-- pressed -->
        <item android:color="#ffffff"/> <!-- default -->
    </selector>

然后,稍后您可以像这样设置视图的背景:在布局xml中的android:background=“@color/mycolors”,或者以编程方式像这样设置:v.setBackgroundColor(getResources().getColor(R.color.mycolors)

在这种情况下,不需要点击或触摸监听器……一切都会神奇地发生


更多信息:

关键点是,您可以使用
StateListDrawable states=new StateListDrawable();states.addState(new int[]{android.R.attr.state_pressed},new ColorDrawable(color));
android:background=“@color/mycolors”
对我不起作用!膨胀布局时会导致异常。@AlirezaMirian这是因为在这种情况下,
android:color
实际上应该是
android:drawable
。您应该按此处所述返回true:。
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true"
              android:color="#ff0000"/> <!-- pressed -->
        <item android:color="#ffffff"/> <!-- default -->
    </selector>