应用样式到Android ListView

4

我希望将我的应用程序中的lisview样式设置为如图所示:

期望输出

我尝试通过应用渐变来开发它:

list_item_normal的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <gradient
        android:centerColor="#E6E6E6"
        android:endColor="#CCCCCC"
        android:startColor="#FFFFFF" 
        android:angle="270"/>
    <!--
        <gradient
        android:startColor="#FF7500"
        android:centerColor="#FFCC00"
        android:endColor="#FF7500"
        android:angle="270"/>
    -->

    <stroke
        android:width="1dp"
        android:color="#A0000000" />

    <padding
        android:bottom="8dp"
        android:left="5dp"
        android:right="5dp"
        android:top="8dp" />

    <corners android:radius="5dp" />

</shape>

list_item_pressed.xml 的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">

    <gradient
        android:centerColor="#E6E6E6"
        android:endColor="#CCCCCC"
        android:startColor="#FFFFFF" android:angle="270"/>
    <!--
         <gradient android:startColor="#FF66CFE6" android:centerColor="#FF207FB9" 
        android:endColor="#FF0060B8" android:angle="270"/>
    -->

    <stroke
        android:width="2dp"
        android:color="#80000000" />

    <padding
        android:bottom="8dp"
        android:left="5dp"
        android:right="5dp"
        android:top="8dp" />

    <corners android:radius="7dp" />

</shape>

list_item_pressed.xml 的代码:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">

    <gradient
        android:centerColor="#E6E6E6"
        android:endColor="#CCCCCC"
        android:startColor="#FFFFFF" android:angle="270"/>
    <!--
         <gradient android:startColor="#FF66CFE6" android:centerColor="#FF207FB9" 
        android:endColor="#FF0060B8" android:angle="270"/>
    -->

    <stroke
        android:width="2dp"
        android:color="#80000000" />

    <padding
        android:bottom="8dp"
        android:left="5dp"
        android:right="5dp"
        android:top="8dp" />

    <corners android:radius="7dp" />

</shape>

以及 list_gradient.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="@drawable/list_item_pressed" />

    <item android:state_focused="true"
          android:drawable="@drawable/list_item_selected" />

    <item android:drawable="@drawable/list_item_normal" />

</selector>

我已将这种样式应用于自定义列表项,如下所示:
<TextView
    .../>

<ImageView
   ... />

而我拥有lisview的main.xml是:

<ListView
    android:id="@+id/List"
    style="@style/list_item_gradient"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:clickable="true" >
</ListView>

我得到的输出如下所示:

当前输出

请告诉我我做错了什么。

谢谢 Shruti


我试图通过自定义列表行布局来深入了解它。我已经完成了必要的工作,例如按下状态、选定状态和正常状态(如您的可绘制文件中所述)。我还将默认布局样式更改为list_item_gradient。但是,我遇到了编舞者警告,可能在主线程上做了太多的工作。有什么可能的解决方法? - Ankit Garg
尝试使用Async Task来减少主线程的工作。 - Shruti
我也在一些论坛上读到,这是因为该样式没有任何父属性。如何定义一个? - Ankit Garg
我不确定是否应该在这里使用AsyncTask,因为我没有进行任何网络相关或其他重型操作。你有什么链接可以提供给我解决这个问题吗? 这是博客文章的链接:http://thesoftwarerogue.blogspot.in/2010/12/skipping-entry-in-package-table-0.html - Ankit Garg
2个回答

5

请解释得更清楚一些,我需要添加ListSelector吗? - Shruti
我已经创建了一个自定义适配器,唯一不起作用的是我无法更改所选列表项的颜色。 - Shruti
@DroidShruti,我想你在谈论触摸特定列表项时出现的“黄色”图像,对吗?如果是这种情况,请创建selector.xml并应用它。 - Paresh Mayani
是的,我就在谈论那个问题...谢谢回复...我创建了一个选择器,它运行良好。 - Shruti
@DroidShruti,我很高兴我的回答对你有帮助 :) - Paresh Mayani
@DroidShruti 我爱上了你.. <3 - Shrey

1
创建一个自定义适配器customAdapter,继承baseAdapter。创建list_item.xml并设置所需的外观,将选择器设置为其背景即可。

我已经创建了一个自定义适配器,唯一的问题是在选择列表项时,其颜色不会像第一张图片中显示的那样改变。 - Shruti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接