【问题标题】:Is any possible add xml layout in android listview divider?是否有可能在 android listview 分隔符中添加 xml 布局?
【发布时间】:2017-03-23 07:45:08
【问题描述】:

我需要使用 xml 布局显示一些自定义分隔线。那么有没有可能这样做呢

<ListView
                    android:id="@+id/volunteer_list"
                    android:layout_width="match_parent"
                    android:divider="@layout/separator"
                    android:dividerHeight="5dp"
                    android:layout_height="wrap_content"/>

?

请查看随附的屏幕截图。在那里你可以看到自定义分隔线。就像我需要在android中设置的一样。您的 cmets 非常受欢迎。

【问题讨论】:

  • 您不能使用布局作为分隔线,它只接受可绘制对象。可能你需要的也可以通过自定义 drawable.xml 来实现
  • 你想设置一个可绘制的图像作为分隔线...?
  • @MatPag 如果可以的话,你能给我一些例子吗。
  • @rafsanahmad007 所以图像只是显示自定义分隔线的可能方式?

标签: java android xml listview android-activity


【解决方案1】:

如果您使用 ListView,您当然可以按照 Daryl 的回答。但是,即使在最后一项之后,分隔符也会存在。我当然会建议切换到 RecyclerView,它是 ListView 的高级版本,具有更多功能和特性。在 RecyclerView 中,这样做:

创建一个可绘制的线潜水器。 (根据需要改变大小和颜色)。

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

<size
    android:width="4dp"
    android:height="4dp"/>

<solid android:color="#d5d5d5" />

创建一个 DividerItemDecorator 类。

public class DividerItemDecorator extends RecyclerView.ItemDecoration {
private Drawable mDivider;

public DividerItemDecorator(Context context) {
    mDivider = ContextCompat.getDrawable(context, R.drawable.line_divider);
}

@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
    int left = parent.getPaddingLeft();
    int right = parent.getWidth() - parent.getPaddingRight();

    int childCount = parent.getChildCount();
    for (int i = 0; i < childCount; i++) {
        View child = parent.getChildAt(i);

        RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

        int top = child.getBottom() + params.bottomMargin;
        int bottom = top + mDivider.getIntrinsicHeight();

        mDivider.setBounds(left, top, right, bottom);
        mDivider.draw(c);
    }
}

}

最后,使用这行代码在 Recycler View 中设置 DividerItemDecorator:

recyclerView.addItemDecoration(new DividerItemDecorator(getApplicationContext()));

【讨论】:

    【解决方案2】:

    尝试以下,我这样做是为了实现: main_listview.xml

     <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listviewLayout"
        android:visibility="visible">
    
        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/listview"
            android:visibility="gone">
        </ListView>
    
    </LinearLayout>
    

    list_row.xml

    <LinearLayout
                android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginLeft="10dip"
            android:orientation="vertical" >
    
            <com.altss.asterridepassenger.utils.customview.CustomTextView
                android:id="@+id/search_list_value"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textColor="@android:color/black"
                android:layout_marginRight="15dip"
                android:textSize="14sp"
                aster:customFont="@string/font_lato_medium" />
    
            <View
                android:layout_width="fill_parent"
                android:layout_height="10dip"    //(increase as your wish) 
                android:layout_marginTop="10dip"
                android:background="@color/search_list_line_color" />
        </LinearLayout>
    

    然后在activity中编码如下:

     adapter = new ArrayAdapter(this, R.layout.list_row.xml,        R.id.search_list_value,list); //list is your list items
    

    【讨论】:

    • 感谢您的代码。如果是这样,最后的列表项也有这个视图吧?是否有可能避免在列表视图的最后一项添加视图。
    • 您可以使用 Basu Singh 的答案并修改 for 循环计数器以满足您的需要,或者您可以使用 ListView 并在 getView() 中执行以下操作:yourDividerView.setVisibility(position == adapterItem. size() - 1 ? Visibility.GONE : Visibility.VISIBLE)
    • @User123 谢谢。是的,它对我真的很有帮助。
    • 没有问题。很高兴我能帮上忙。
    【解决方案3】:

    是否有可能在 android listview 分隔符中添加 xml 布局?

    不,这是不可能的。

    现在,当您正在寻找设置分隔线(如附加的屏幕截图)时,您可以使用可绘制文件。

    制作一个可绘制文件说divider.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:gravity="center">
            <shape android:shape="rectangle">
                <solid android:color="#c3c3c3" />
            </shape>
        </item>
        <item
            android:height="1dp"
            android:gravity="top">
            <shape android:shape="rectangle">
                <solid android:color="#000" />
            </shape>
        </item>
        <item
            android:height="1dp"
            android:gravity="bottom">
            <shape android:shape="rectangle">
                <solid android:color="#000" />
            </shape>
        </item>
    </layer-list>
    

    现在将此文件传递给您 ListView 作为分隔符

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@drawable/divider"
        android:dividerHeight="10dp" /> <!-- adjust according to your need -->
    

    你可以走了。它会给你你所需要的。

    输出

    快乐编码。

    【讨论】:

      猜你喜欢
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      相关资源
      最近更新 更多