以编程方式单击时突出显示 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;
现在使用
设置 TouchListenertextView.setOnTouchListener(new CustomTouchListener());
【讨论】:
以上是关于以编程方式单击时突出显示 TextView的主要内容,如果未能解决你的问题,请参考以下文章
单击第一个按钮时,它变为突出显示,单击第二个,第二个突出显示,第一个变为正常