Android 想让textview像在按钮上一样通过单击来更改颜色吗

Android 想让textview像在按钮上一样通过单击来更改颜色吗,android,android-layout,Android,Android Layout,我想让用户在点击一个文本字段时有一种感觉,就像我们点击一个按钮一样,在释放按钮后,它会在很短的时间内变成橙色,一眨眼,然后再次变成它的第一种颜色。当我点击它时,它工作正常,但没有出现颜色闪烁 布局文件 <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" and

我想让用户在点击一个文本字段时有一种感觉,就像我们点击一个按钮一样,在释放按钮后,它会在很短的时间内变成橙色,一眨眼,然后再次变成它的第一种颜色。当我点击它时,它工作正常,但没有出现颜色闪烁

布局文件

<TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button5"
        android:layout_below="@+id/button5"
        android:layout_marginLeft="35dp"
        android:layout_marginTop="28dp"
        android:clickable="true"
        android:onClick="onClick"
        android:text="Click Me"
        android:textAppearance="?android:attr/textAppearanceLarge" />

您可以使用
OnTouchListener
,也可以使用选择器

textV.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
            // change color
    }
    else if (event.getAction() == MotionEvent.ACTION_UP) {
            // set to normal color
    }

    return true;
}
});
编辑:

您也可以使用选择器。边框和圆角矩形。自定义相同的

可绘图文件夹中的bkg.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="@drawable/pressed" />
    <item  android:state_focused="false" 
        android:drawable="@drawable/normal" />
</selector>
<?xml version="1.0" encoding="UTF-8"?> 
  <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"> 
  <solid android:color="#0AECBF"/>    
  <stroke android:width="3dp"
        android:color="#0FECFF" /> 
  <padding android:left="5dp"
         android:top="5dp"
         android:right="5dp"
         android:bottom="5dp"/> 
  <corners android:bottomRightRadius="7dp"
         android:bottomLeftRadius="7dp" 
         android:topLeftRadius="7dp"
         android:topRightRadius="7dp"/> 
  </shape>  
<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
   <solid android:color="#ff33ffff" />
 <padding android:left="5dp"
             android:top="5dp"
             android:right="5dp"
             android:bottom="5dp"/> 
    <corners android:bottomRightRadius="7dp"
             android:bottomLeftRadius="7dp" 
             android:topLeftRadius="7dp"
             android:topRightRadius="7dp"/> 
</shape>

只需将选择器设置为背景可绘制。使用“选择器”在drawable文件夹中创建一个新的Android xml文件:

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
    <color android:color="@android:color/black" />
</item>
<item>
    <color android:color="@android:color/white" />
</item>
   </selector>
这只是一个糟糕的例子,您可以为不同的背景等创建shapes.xml。


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_selected="true" android:drawable="#002233"/>
    <item android:state_pressed="true" android:drawable="#112233"/>
    <item android:drawable="#001122"></item>
</selector>
在布局文件夹中创建一个xml文件(比如text_bkgrnd),并在其中添加上述代码

现在,在main.xml中将textView的background属性设置为创建的xml文件

希望这有帮助。根据需要更改状态的哈希值

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#61ab69" />
            <stroke
                android:width="1dp"
                android:color="#53933f" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="5dp"
                android:top="5dp"
                android:right="5dp"
                android:bottom="5dp" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#009933"
                android:endColor="#00bf33"
                android:angle="270" />
            <stroke
                android:width="1dp"
                android:color="#53933f" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="5dp"
                android:top="5dp"
                android:right="5dp"
                android:bottom="5dp" />
        </shape>
    </item>
</selector>
在该文本视图中


它可以正常工作

您可以尝试设置onTouchListener。像这样的

myButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_DOWN){

        // Change your color here
        return true;
    }
    return false;
  }
});
onTouchListener应该在按钮的onClickListener属性之前启动

android:background="@drawable/focus_color.xml"
//focus_color.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="@drawable/gradient_focus" 
        /> <!--pressed  -->
    <item 
        android:state_focused="true"
        android:drawable="@drawable/gradient_titlebar" 
        /> <!-- focused -->    
    <item 
        android:drawable="@drawable/gradient_paint" 
        /> <!-- default -->
</selector>  

//gradient_focus.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <gradient
        android:angle="90"
        android:endColor="#FFFFFF"
        android:startColor="#e8ebef"
        android:type="linear" />

    <stroke
        android:width="0.3dp"
        android:color="#000000" />

    <corners android:radius="0.5dp" />

</shape>  

//gradient_titlebar.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <gradient
        android:startColor="#E2EEFC"
        android:endColor="#BFCBD9"
        android:type="linear"
        android:angle="90"/>
    <corners android:radius="2dp" />
</shape>  

//gradient_paint.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <gradient
        android:startColor="#94D7F2"
        android:endColor="#65A2DB"
        android:type="linear"
        android:angle="90"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp"/>
    <corners android:radius="2dp"/>
</shape>


尝试使用并更改
ACTION\u DOWN
ACTION\u UP
之间间隔的文本颜色为什么有onClick和onClick listener?我想建议您按照我的建议尝试选择。你的代码有效too@user2041902我在任何地方都用过选择器。我知道这也行。我在许多答案中也提出了同样的建议。@user2041902也发布了选择器部分。检查一下。@Raghunandan非常感谢
<?xml version="1.0" encoding="utf-8"?>
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <item 
        android:state_pressed="true"
        android:drawable="@drawable/gradient_focus" 
        /> <!--pressed  -->
    <item 
        android:state_focused="true"
        android:drawable="@drawable/gradient_titlebar" 
        /> <!-- focused -->    
    <item 
        android:drawable="@drawable/gradient_paint" 
        /> <!-- default -->
</selector>  
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <gradient
        android:angle="90"
        android:endColor="#FFFFFF"
        android:startColor="#e8ebef"
        android:type="linear" />

    <stroke
        android:width="0.3dp"
        android:color="#000000" />

    <corners android:radius="0.5dp" />

</shape>  
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <gradient
        android:startColor="#E2EEFC"
        android:endColor="#BFCBD9"
        android:type="linear"
        android:angle="90"/>
    <corners android:radius="2dp" />
</shape>  
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <gradient
        android:startColor="#94D7F2"
        android:endColor="#65A2DB"
        android:type="linear"
        android:angle="90"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp"/>
    <corners android:radius="2dp"/>
</shape>