【问题标题】:Want textview to change color with click just like on a button想要 textview 通过点击来改变颜色,就像在按钮上一样
【发布时间】:2013-07-30 19:18:56
【问题描述】:

我想让用户在单击文本字段时感觉就像当我们单击按钮时一样,并且在释放按钮后它会在很短的时间内变为橙色并闪烁并再次变成它的第一种颜色。当我点击它时效果很好,但没有出现颜色闪烁。

布局文件

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

mainActivity 代码

textV.setOnClickListener(new OnClickListener() {

    @Override
            public void onClick(View view) {
        startActivity(new Intent("com.DRMS.help"));
            }
        }); 

【问题讨论】:

标签: android android-layout


【解决方案1】:

您可以使用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>

drawable 文件夹中的 normal.xml

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

drawable 文件夹中的pressed.xml

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

现在设置背景

     android:background="@drawable/bkg"

【讨论】:

  • 我想建议您按照我的建议尝试选择器。你的代码也有效
  • @user2041902 我自己在任何地方都使用过选择器。我知道这也有效。我在很多答案中也提出了同样的建议。
  • @user2041902 也发布了选择器部分。检查一下。
  • @Raghunandan 非常感谢
【解决方案2】:

只需将选择器设置为背景可绘制。在可绘制文件夹中创建一个带有“选择器”的新 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>

然后,在您的 xml 布局中,将其设置为您的 textView:

    android:background="@drawable/your_selector"

这只是一个糟糕的例子,你可以为不同的背景等创建shapes.xml。

【讨论】:

    【解决方案3】:
    <?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 的背景属性设置为这个创建的 xml 文件

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

    【讨论】:

      【解决方案4】:
      <?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>
      

      在drawable文件夹中保存为btnclick.xml 并将其用作

      android:background="@drawable/btnclick
      

      在那个文本视图中

      它会正常工作

      【讨论】:

        【解决方案5】:

        您可以尝试设置 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 之前触发

        【讨论】:

          【解决方案6】:

          按钮的属性

          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>  
          

          //渐变标题栏.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>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-29
            • 1970-01-01
            • 2016-09-11
            • 2019-11-15
            • 1970-01-01
            相关资源
            最近更新 更多