Android Listview包含一些非标准列

时间:2012-06-03 00:57:37

标签: android

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

enter image description here

问题:

如何绘制/创建此类列表视图行

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

2)第二列是一种带有两个horz的盒子。和顶点分割线。

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

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

如何将所有3组合成一个jazy行? :)

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

感谢您提出任何建议

雅各

2 个答案:

答案 0 :(得分: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颜色以创建不同的填充颜色(例如正方形)。

结果看起来有点像这样:

list item layout

最大的缺点是,没有一种直接的方法来摆脱“双重”。不同行之间的分隔符。如果它真的困扰你,那么肯定有两种方法可以解决它们(例如,为适配器中的第一个和最后一个项目填充不同的布局,或者将第一个和最后一个项目添加为页眉和页脚,或者因素这些线条分成不同的视图,然后你可以切换,等等......)。

我没有添加ImageView,因为那样会非常明显。将其放置在&#39;项目的相同位置。 TextView并根据您是要显示文字还是图片在两者之间切换。

我假设您能够为布局提供匹配的Adapter(以及&#39; ViewHolder&#39; /#39; RowWrapper&#39;)

如果还有什么不清楚,请删除一行。 :)

答案 1 :(得分: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));

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