【问题标题】:Highlight TextView when clicked programmatically以编程方式单击时突出显示 TextView
【发布时间】:2014-12-11 13:56:53
【问题描述】:

我动态生成像按钮一样工作的 TextView。现在我想在它们被按下时突出显示它们。诸如更改文本颜色或背景颜色之类的东西。 我尝试使用选择器,但它不起作用。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:color="#ffffff"/>
<item android:state_pressed="true" android:state_enabled="false" android:color="#ffffff" />
</selector>

这是我创建 TextViews 的循环。

int z = 0;
    for (MOKGenericDataItem d : data) {
        if (d.getButtonText() != null) {
            final int pagePosition = z;
            TextView btn = new TextView(getActivity());
            btn.setId(z);
            final int id_ = btn.getId();
            btn.setText(d.getButtonText());
            btn.setTextSize(TypedValue.COMPLEX_UNIT_SP, 30);
            btn.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f));
            btn.setGravity(Gravity.CENTER);

            mLineareLayoutViewPagerButtons.addView(btn);

            btn1 = ((TextView) view.findViewById(id_));
            btn1.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    mViewPager.setCurrentItem(pagePosition,false);
                }
            });
        }
        z++;
    }

【问题讨论】:

  • 你在哪里设置 TextView 的选择器?
  • 我没有看到你将选择器设置为 TextView 的背景?

标签: android textview


【解决方案1】:

首先,您的这一行会造成歧义,因为您将变量名称设为 btn1(将其与按钮相关联)并且您正在引用 TextView

 btn1 = ((TextView) view.findViewById(id_));

不管怎样,一步一步来,

  • drawable 文件夹中创建一个类似于label_bg.xml 的xml,如下所示:

     <?xml version="1.0" encoding="utf-8"?>
        <selector xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:drawable="@drawable/pressed_color"
                  android:state_pressed="true" />    
            <item android:drawable="@drawable/normal_color" />
        </selector>
    
  • values 文件夹中创建另一个xml,如下所示,命名为labelcolors.xml

     <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <drawable name="pressed_color">#7ec0ee</drawable> <!--custom color for pressed state -->
    <drawable name="normal_color">#00FFFFFF</drawable> <!--transperent color for normal state -->
    </resources>
    
  • 现在将标签的背景设置为label_bg.xml

      <TextView
        android:id="@+id/yourlabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="760dp"
        android:layout_marginTop="515dp"
        android:background="@drawable/label_bg"   <!--like this-->
        android:text="LabelText"
        android:textSize="20dp" />
    

当您动态添加视图时,您需要以编程方式为每个 textView 设置背景。对于在创建的 textview 对象上调用 setBackgroundResource() 并将 label.xml 设置为背景

【讨论】:

  • 谢谢,工作。现在按一下它就会变成白色,我可以把它改成白色吗?
  • 你有解决办法吗?在我按下另一个 texview 之前它会保持白色?
  • 我猜您正在寻找类似点击的功能,请查看this link 直到我回复您
  • 当我们还想动态设置状态颜色时该怎么办?有可能吗?
  • Have a look@inverted_index
【解决方案2】:

您需要使用OnTouchListener 和Detect touch Motin 创建一个类实现。 ACTION_DOWN,更改文本颜色,ACTION_UP 根据您的要求更改其默认颜色。

代码:

public class CustomTouchListener implements View.OnTouchListener {
    public boolean onTouch(View view, MotionEvent motionEvent) {
        switch (motionEvent.getAction()) {
        case MotionEvent.ACTION_DOWN:
            ((TextView) view).setTextColor(0xFFFFFFFF); // white
            break;
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            ((TextView) view).setTextColor(Color.parseColor("#4a4a4a")); // lightblack
            break;
        }
        return false;
    }
}

现在使用

设置 TouchListener
textView.setOnTouchListener(new CustomTouchListener());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多