【问题标题】:Listview divider marginListview 分隔边距
【发布时间】:2012-06-19 07:28:35
【问题描述】:

我正在尝试为 listview 分隔符设置边距。
分隔线是虚线:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line" >
    <stroke
        android:dashGap="1dp"
        android:dashWidth="1.5dp"
        android:width="1dp"
        android:color="#FF404040" />

    <size android:height="3dp" />

</shape>

还有一个listview,我在其中设置了分隔符

<ListView
    android:id="@+id/lv_news_feed_list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white"
    android:divider="@drawable/ch_dashed_line_divider"
    />

但我想要一个分隔符左右边距。 我还尝试为形状设置填充,但 listview 忽略了填充。

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

是否有可能为 listview 分隔线设置边距 - 适配器的 getView() 除外?

【问题讨论】:

    标签: android android-listview divider


    【解决方案1】:

    插图是要走的路

    <?xml version="1.0" encoding="UTF-8"?>
    <inset xmlns:android="http://schemas.android.com/apk/res/android"
        android:insetLeft="15dp"
        android:insetRight="15dp" >
    
        <shape
            android:shape="line" >
            <stroke
                android:dashGap="1dp"
                android:dashWidth="1.5dp"
                android:width="1dp"
                android:color="#FF404040" />
    
                <size android:height="3dp" />
    
        </shape>
    
    </inset>
    

    【讨论】:

    • 这里很容易找到最佳答案。这就是 inset xml 结构的用途。
    • 如果我们只想要一条线,使用 并设置属性“android ListView 中的 :dividerHeight"
    【解决方案2】:

    使用'插入'.....

    (list_divider.xml)

    <?xml version="1.0" encoding="UTF-8"?>
    <inset xmlns:android="http://schemas.android.com/apk/res/android"
        android:insetLeft="50dp"
        android:insetRight="50dp" >
    
     <shape>
        <solid android:color="@color/orange" />
        <corners android:radius="2.0dip" />
    </shape>
    
    </inset>
    

    并在您的列表视图中添加这样的...

    <ListView
        android:dividerHeight="2dp"
        android:divider="@drawable/list_divider"
        ...
    />
    

    您可以根据需要设置插入值...

    【讨论】:

    • 您可以将&lt;size android:height="0.5dp" /&gt; 元素直接放入shape 以避免重复每个listview 的高度。
    【解决方案3】:

    你可以使用以下思路:

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/table_background"/>
        </shape>
    </item>
    <item android:left="2dp" android:right="2dp">
        ... your shape here ...
    </item> </layer-list>
    

    它对我有用。希望它会有所帮助。

    【讨论】:

      【解决方案4】:

      你可以使用渐变来获得左右边距而不是描边。试试这个示例,它以黑色开始和结束,在中心你会得到白色。看起来你已经给了边距

       <gradient android:startColor="#000000" android:centerColor="#ffffff"
          android:endColor="#000000" />
      

      【讨论】:

      • 这是一个很好的解决方案,但我需要分隔线中虚线的笔触,所以我不能使用渐变。
      【解决方案5】:

      我不相信这是可能的:/ 虽然如果您在每个列表项的底部添加自己的可绘制对象并删除 ListViews 分隔符,您可以随意自定义它:)

      创建文件夹res/drawable并新建一个xml:

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

      ..然后在列表项中使用该可绘制对象。

      或者一种非常快速而肮脏的方法是在列表项的底部创建一个带有彩色背景的薄线性布局(或其他一些布局)来伪造一个可自定义的 ListView 分隔线。..

      不是一个合适的解决方案,只是一些修复的想法;)

      【讨论】:

      • 这是我的第一个想法。将它自己附加到适配器中,但我不知道这是否有效。
      • 试一试看看 ;) 或者制作你自己的自定义 ListView,尽管我怀疑这是否值得。
      猜你喜欢
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 2017-07-04
      相关资源
      最近更新 更多