我需要在列表视图中实现半透明的行选择,并且还需要“按下”状态。
如果我使用纯色,那么一切都按预期工作。但是,如果我应用半透明颜色(#44444444),那么我会看到默认选择颜色(我的2.3 android上的橙色),并且在它上面有我的颜色(它略微变暗橙色)。
为什么我的颜色下面有橙色? 如何解决这个问题?
这是我的代码: drawable / listselectorinvisible.xml中的Selector xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false"
android:state_selected="false"
android:drawable="@color/transparent" />
<item android:state_pressed="true"
android:drawable="@color/semitransparent" />
<item android:state_selected="true" android:state_pressed="false"
android:drawable="@color/semitransparent" />
</selector>
Listview行在layout / topscore_row.xml中定义
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:background="@drawable/listselectorinvisible">
<TextView android:layout_height="wrap_content" android:id="@+id/scrowNum" android:textColor="@color/fontButColor" android:text="#" android:textSize="24sp" android:layout_width="32dip" android:gravity="right|top" android:layout_gravity="top"></TextView>
<LinearLayout android:layout_height="wrap_content" android:id="@+id/scrowNamLay" android:layout_width="142dip" android:orientation="vertical">
<TextView android:layout_height="wrap_content" android:paddingTop="2dip" android:layout_width="fill_parent" android:id="@+id/scrowPlayer" android:textColor="@color/fontButColor" android:text="@string/tblPlayer" android:textSize="24sp" android:paddingLeft="2dip"></TextView>
<TextView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/scrowOpPlayer" android:textColor="@color/fontButColor" android:text="@string/tblPlayer" android:textSize="14sp" android:paddingLeft="2dip"></TextView>
</LinearLayout>
<ImageView android:id="@+id/scrowImg" android:layout_height="wrap_content" android:src="@drawable/small_im_bt" android:padding="2dip" android:layout_marginTop="2dip" android:layout_width="26dip"></ImageView>
<TextView android:layout_height="wrap_content" android:layout_width="48dip" android:id="@+id/scrowScore" android:layout_marginRight="5dip" android:gravity="right" android:textColor="@color/fontButColor" android:text="@string/tblScore" android:textSize="26sp"></TextView>
<TextView android:layout_height="wrap_content" android:id="@+id/scrowTime" android:textColor="@color/fontButColor" android:text="@string/tblTime" android:gravity="center_horizontal" android:textSize="26sp" android:layout_width="58dip"></TextView>
</LinearLayout>
最后是listview本身:
<ListView android:layout_width="match_parent" android:id="@+id/scoreList" android:paddingLeft="5dip" android:paddingRight="5dip"
android:cacheColorHint="#00000000"
android:choiceMode="none"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:longClickable="false" android:layout_height="298dip">
</ListView>
在xml中设置颜色失败后,我还试图通过 convertView.setBackgroundResource(R.drawable.listselectorinvisible); 在我的CustomArrayAdapter中设置listselectorinvisible,但没有运气。
CustomAdapter的代码:
/* (non-Javadoc)
* @see android.widget.ArrayAdapter#getView(int, android.view.View, android.view.ViewGroup)
*/
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if (v == null)
{
LayoutInflater vi = (LayoutInflater)app.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.topscore_row, null);
}
Score score = objects.get(position);
int color = getColor(position, score);
if (score != null)
{
ImageView iv = (ImageView) v.findViewById(R.id.scrowImg);
if (iv != null)
{
iv.setImageResource(imgs[score.gameType]);
}
TextView tv = (TextView) v.findViewById(R.id.scrowNum);
tv.setText(Integer.toString(position+1) + ".");
tv.setTypeface(app.mainFont);
tv.setTextColor(color);
.... ....
}
v.setBackgroundResource(R.drawable.listselectorinvisible);
return v;
}
提前谢谢。
答案 0 :(得分:7)
您必须在ListView中设置android:listSelector="@drawable/listcolor"
您的ListView将是
<ListView android:layout_width="match_parent" android:id="@+id/scoreList" android:paddingLeft="5dip" android:paddingRight="5dip"
android:cacheColorHint="#00000000"
android:choiceMode="none"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:longClickable="false"
android:listSelector="@drawable/listcolor"
android:layout_height="298dip">
</ListView>
看看下面的URl
How to set Selection Color to ListView
由于 迪帕克
答案 1 :(得分:2)
经过几个小时的同样问题,我终于得到了解决方案。
首先,在ListView中设置listSelector =“@ android:color / transparent”(出于某种原因@null在这里不起作用)
其次,使用state_pressed =“@ color / with_transparency”让你的行的最父背景为有状态的可绘制(可能是有状态的颜色)
答案 2 :(得分:0)
我不知道它是否重要,但你的选择器没有默认状态(应该是最后一个)。
此外,它没有回答你的问题,但是 在top_score行中,考虑将以下内容添加到xml中,添加到根布局:
android:addStatesFromChildren="true"
它将说明列表项以捕获子项的状态,即复合组件充当单个组件并获取其中任何组件的状态。 (例如,如果选择一个,则选择化合物组分)。
此致 斯特凡