【问题标题】:How do you set background style for selected list items?如何为选定的列表项设置背景样式?
【发布时间】:2012-08-10 05:28:07
【问题描述】:

我在使用自定义适配器和列表项 xml 布局定义 ListView 时遇到问题。问题是我的 ListView 在按下时没有突出显示项目。我正在执行以下操作:

我定义了一个drawable selector 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;
}

一切正常,除非我按下列表中的项目时没有视觉指示。我希望按下项目的背景颜色转换为我的可绘制选择器定义的样式。

如何在按下时同时拥有自定义视图项并保持项的样式突出显示?

【问题讨论】:

    标签: android


    【解决方案1】:

    如果android:background="@drawable/btn_voice_item" 是实心图像,那么它将覆盖ListView 选择器。这是关于自定义ListView selector和项目背景的非常详细的教程 ListViewTipsandTricks part3(西里尔·莫蒂尔)

    【讨论】:

    • 谢谢西里尔。在您回复之前,我实际上阅读了您的博客文章,您的演示帮助我解决了我的问题。
    【解决方案2】:

    这是我使用的 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" >
    

    也许你觉得这很有用,可以解决你的问题

    【讨论】:

    • 对不起,这不是为我做的。你能给我一个示例项目吗?将不胜感激。
    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2019-06-21
    相关资源
    最近更新 更多