0

下图是我正在寻找的 Listview 行。它的库存清单。

在此处输入图像描述

问题:

如何绘制/创建这种列表视图行,其中

1)第一列没有水平。或垂直。分割线。

2)第二列是一种带有两个水平的盒子。和垂直分割线。

第二列和第三列之间有一个空格。

3) 第三列是标准列表视图行,其中包含文本和小图标。

如何结合所有 3 使这成为一个爵士乐行?:)

我确实知道如何仅使用第 3 列来制作列表视图;与文本和图像。但是列间距和垂直线是我不知道的。

谢谢你的任何建议

雅各布

4

2 回答 2

2

创建一个布局,如ListView. 我只是在你的路上帮助你。请注意,您可能想要进行一些改进,例如,不要对“正方形”的大小进行硬编码,而是从dimens.xml不同的屏幕密度/大小存储桶中提供它们。

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight"
    android:gravity="center_vertical">

    <View android:layout_width="30dp" android:layout_height="30dp"
        android:layout_margin="5dp" android:background="@drawable/border_color_red" />

    <TextView android:layout_width="?android:attr/listPreferredItemHeight"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:background="@drawable/border" android:gravity="center"
        android:text="QTY" android:textAppearance="?android:attr/textAppearanceMedium" />

    <RelativeLayout android:layout_width="0dp"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:layout_marginLeft="5dp" android:layout_marginRight="5dp"
        android:layout_weight="1" android:background="@drawable/border"
        android:gravity="center_vertical" android:padding="5dp">

        <TextView android:id="@android:id/text1"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:layout_centerVertical="true" android:layout_toLeftOf="@+id/star"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <CheckBox android:id="@+id/star" style="?android:attr/starStyle"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_centerVertical="true" android:layout_toLeftOf="@+id/box_right"
            android:text=" " />

        <View android:id="@+id/box_right" android:layout_width="30dp"
            android:layout_height="30dp" android:layout_alignParentRight="true"
            android:layout_centerVertical="true" android:layout_margin="5dp"
            android:background="@drawable/border_color_red" />
    </RelativeLayout>

</LinearLayout>

ListView需要隐藏其分隔线:

<ListView android:id="@android:id/list" android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:divider="@null">
        <!-- Preview: listitem=@layout/list_item_layout -->
    </ListView>

使用简单的添加边框ShapeDrawable

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke android:height="1dp" android:width="1dp" android:color="#000" />
    <solid android:color="@android:color/transparent" />
</shape>

更改solid颜色以创建不同的填充颜色(例如正方形)。

结果看起来有点像这样:

列表项布局

最大的缺点是没有真正简单的方法来摆脱不同行之间的“双”分隔符。如果它真的困扰你,肯定有几种方法可以解决它们(例如,为适配器中的第一个和最后一个项目膨胀不同的布局,或者将第一个和最后一个项目添加为页眉和页脚,或者将行分解为然后可以切换的单独视图等...)。

我没有添加,ImageView因为那将是不言自明的。将其放置在与“项目”相同的位置,TextView并根据您是要显示文本还是图像来在两者之间切换。

我假设您将能够Adapter为布局提出匹配的(和“ViewHolder”/“RowWrapper”)。

如果仍有任何不清楚的地方,请留下一行。:)

于 2012-06-03T02:02:20.537 回答
0

我使用 TableLayout 和 TableRow 做了类似的事情。它允许您在 XML 中制作“行模板”,然后按照您想要的任何顺序实现它们。

假设您的活动使用布局 main.xml:

setContentView(R.layout.main);

然后,您将根据需要对每个行模板进行膨胀:

     LayoutInflater myInflate = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row1 = (TableRow) myInflate.inflate(R.layout.matchesoverviewlistitem, null);

     // Here you can do anything you want with the table row elements
     tv = (TextView)row1.findViewById(R.id.matchesOverLabel);
     tv.setText("MyText");

     row1.setTag(n);
     row1.setOnClickListener(seriesListener);

     // Finally add the table row to the tableLayout
     myTable.addView(row1,new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

当对多行使用不同的布局时,这对我来说效果很好。

于 2012-06-03T01:06:01.227 回答