以编程方式单击时突出显示TextView

时间:2014-10-16 09:04:45

标签: android textview

我动态生成像按钮一样工作的TextViews。现在我想在他们受到压力时强调它们。像改变文本颜色或背景颜色的东西。 我曾尝试使用选择器,但它不起作用。

<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++;
    }

2 个答案:

答案 0 :(得分:5)

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

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

无论如何,一步一步走,

  • label_bg.xml文件夹中创建如drawable之类的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设置背景。对于创建的setBackgroundResource()对象上的调用textview并设置{ {1}}作为背景

答案 1 :(得分:3)

您需要使用OnTouchListener创建一个类工具并检测触摸MotinACTION_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());