这是我的列表选择器:(item_selector.xml)
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@color/orange" />
<item android:state_focused="true" android:drawable="@color/orange" />
<item android:state_pressed="true" android:drawable="@color/orange" />
<item android:drawable="@color/transparent" />
</selector>
这是我的行列(row_item.xml)
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/alarm_item_drawer_selector"
>
<ImageView
android:id="@+id/item_icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_centerHorizontal="true"
android:paddingTop="5dp"
android:paddingBottom="2dp"
android:src="@drawable/ic_launcher"/>
<TextView
android:id="@+id/item_title"
style="@style/DrawerItemTextStyle"
android:textColor="@color/text_drawer_item_selector"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/item_icon" />
</RelativeLayout>
我想改变android:state_pressed =&#34; true&#34;机器人:抽拉=&#34; @色/橙色&#34;动态的其他颜色。我的目标是使每一行的按压颜色不同。有可能吗?
答案 0 :(得分:9)
对每个项目影响一个新的StateListDrawable。
StateListDrawable stateListDrawable= new StateListDrawable();
stateListDrawable.addState(new int[] {android.R.attr.state_pressed}, new ColorDrawable(getContext().getResources().getColor(R.color.anycolor)));
stateListDrawable.addState(new int[] {android.R.attr.state_focused}, new ColorDrawable(getContext().getResources().getColor(R.color.anycolor)));
stateListDrawable.addState(new int[] {android.R.attr.state_selected}, new ColorDrawable(getContext().getResources().getColor(R.color.anycolor)));
stateListDrawable.addState(new int[] {}, new ColorDrawable(getContext().getResources().getColor(R.color.anycolor)));
view.setBackgroundDrawable(stateListDrawable);
答案 1 :(得分:1)
我在我的一个项目中所做的是创建了一个静态方法,它可以获取任何视图,并将其背景更改为我制作的六种不同颜色选择器之一。这里的诀窍是没有尝试更改列表视图选择器,您想要更改列表视图布局的父布局的背景。
以下是一个例子:
listview.xml(listview的实际内容)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parent"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:id="@+id/text"
android:text="Text"
android:padding="20dp"/>
</LinearLayout>
我的适配器中的getView()方法:
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
Holder holder = new Holder();
if (view == null) {
LayoutInflater inflater = LayoutInflater.from(context);
view = inflater.inflate(R.layout.listview, viewGroup, false);
} else {
holder = (Holder) view.getTag();
}
holder.parent = (LinearLayout) view.findViewById(R.id.parent);
setRandomListViewSelector(holder.parent);
holder.text = (TextView) view.findViewById(R.id.text);
holder.text.setText(strs.get(i));
return view;
}
更改背景的静态方法:
public static void setRandomListViewSelector(View parentView) {
int i = new Random().nextInt(2);
switch (i) {
case 0:
parentView.setBackgroundResource(R.drawable.list_selector_blue);
break;
case 1:
parentView.setBackgroundResource(R.drawable.list_selector_red);
break;
}
}
list_selector_blue.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<solid android:color="@android:color/holo_blue_dark"/>
</shape>
</item>
</selector>
在我的示例中,我只使用Random类随机生成0到1之间的数字。如果您想要更多控件,可以创建一个全局变量并将其递增1,以便您可以更好地控制在什么背景颜色设置。
答案 2 :(得分:0)
如果要动态更改它,则必须通过代码执行此操作。为此,您必须使用onTouchListener,因为您想知道何时触摸并释放视图。
final TextView textView =findViewById(R.id.item_title);
textView.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View view, MotionEvent motionEvent)
{
switch (motionEvent.getAction()){
case MotionEvent.ACTION_DOWN:
textView.setTextColor(Color.RED);
break;
case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL:
textView.setTextColor(Color.BLACK);
break;
}
return false;
}
});
上面的代码会在您按下时更改textview的文本颜色。将Color.RED
更改为您想要的颜色