我动态生成像按钮一样工作的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++;
}
答案 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
创建一个类工具并检测触摸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());