我在使用自定义适配器和列表项xml布局定义ListView时遇到问题。问题是我的ListView在按下时不是突出显示的项目。我正在做以下事情:
我定义了一个可绘制的选择器xml资源文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@android:color/holo_orange_light" />
<item android:state_pressed="false" android:drawable="@android:color/white" />
</selector>
我定义了一个项目布局xml文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/btn_voice_item"
>
<ImageButton
android:id="@+id/voiceItemFavorite"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_centerVertical="true"
android:layout_margin="5dp"
android:background="@drawable/btn_favorite" />
<TextView
android:id="@+id/voiceItemText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_margin="5dp"
android:layout_toRightOf="@+id/voiceItemFavorite"
android:background="@drawable/btn_voice_item" />
</RelativeLayout>
最后,我在自定义数据适配器中编写代码以进行膨胀和填充,然后进行查看。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = context.getLayoutInflater();
convertView = inflater.inflate(R.layout.voice_item, null);
}
VoiceItem i = getItem(position);
TextView t = (TextView) convertView.findViewById(R.id.voiceItemText);
t.setText(i.toString());
ImageButton b = (ImageButton) convertView.findViewById(R.id.voiceItemFavorite);
b.setTag(i);
b.setSelected(i.favorite);
b.setOnClickListener(new FavoriteClick());
return convertView;
}
一切正常,除非我按下列表中的项目时没有按下的可视指示。我希望按下的项目背景的颜色转换为我的drawable选择器定义的样式。
如何同时按下自定义视图项并保留样式突出显示项目?
答案 0 :(得分:1)
如果android:background="@drawable/btn_voice_item"
是实心图片,那么它将覆盖ListView
选择器。这是关于自定义ListView selector
和项目背景的非常详细的教程
ListViewTipsandTricks part3(Cyril Mottier)
答案 1 :(得分:0)
这是我使用的xml。请注意,这是渐变。但是把它放在你的@android中:color / holo_orange_light
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#18d7e5"
android:centerColor="#16cedb"
android:endColor="#09adb9"
android:angle="270" />
</shape>
这是我的选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/gradient_bg" />
<item android:state_pressed="true"
android:drawable="@drawable/gradient_bg_hover" />
<item android:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/gradient_bg_hover" />
</selector>
这就是我在列表中的xml文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_selector"
android:orientation="horizontal"
android:padding="5dip" >
也许你觉得这很有用,可以解决你的问题