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

Posted

技术标签:

【中文标题】以编程方式单击时突出显示 TextView【英文标题】:Highlight TextView when clicked programmatically 【发布时间】: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 的背景? 【参考方案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_
    android:layout_
    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());

【讨论】:

以上是关于以编程方式单击时突出显示 TextView的主要内容,如果未能解决你的问题,请参考以下文章

单击第一个按钮时,它变为突出显示,单击第二个,第二个突出显示,第一个变为正常

单击时突出显示表格视图单元格

在鼠标悬停时突出显示L.divIcon或在Leaflet地图中以编程方式突出显示

Android如何在点击时使视图突出显示?

UIButton 以编程方式获取默认突出显示样式

首次加载后以编程方式突出显示 tableview 中的第一行