2012-08-13 71 views
1

我有問題定義與自定義適配器和列表項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; 
} 

除了當我按下列表中的項目時沒有視覺指示新聞出版物,一切都有效。我期望按下的項目背景的顏色轉換爲由我的可繪製選擇器定義的樣式。

我怎樣纔能有一個自定義的查看項目,並保持按下時項目的樣式突出顯示?

回答

1

如果android:background="@drawable/btn_voice_item"是固體圖像它將覆蓋ListView選擇器。這裏是非常詳細的教程關於自定義ListView selector和項目背景 ListViewTipsandTricks part3(Cyril Mottier)

+0

謝謝西里爾。實際上,我在閱讀您的博客文章之前回答了您的演示,並幫助我解決了我的問題。 – sysrpl 2012-08-14 01:38:32

+0

不客氣,但這不是我的博客:) – 2012-08-14 01:41:48

0

這是我使用的xml。請注意,這是漸變。但把這個在您的@android:彩色/ 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" > 

也許你覺得這個有用,可以解決你的問題

+0

對不起,這不是爲我做的。你可以給我一個示例項目嗎?這將非常感激。 – sysrpl 2012-08-13 23:55:46

相關問題