下面的图片是我正在寻找的Listview行。它的库存清单。
问题:
如何绘制/创建此类列表视图行
1)第一列没有水平。或者垂直。分裂线。
2)第二列是一种带有两个horz的盒子。和顶点分割线。
第二列和第三列之间有空格。
3)第三列是标准列表视图行,其中包含文本和小图标。
如何将所有3组合成一个jazy行? :)
我知道如何单独使用第3列制作列表视图;与文本和图像。但是列间距和垂直线是我不知道的。
感谢您提出任何建议
雅各
答案 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
颜色以创建不同的填充颜色(例如正方形)。
结果看起来有点像这样:
最大的缺点是,没有一种直接的方法来摆脱“双重”。不同行之间的分隔符。如果它真的困扰你,那么肯定有两种方法可以解决它们(例如,为适配器中的第一个和最后一个项目填充不同的布局,或者将第一个和最后一个项目添加为页眉和页脚,或者因素这些线条分成不同的视图,然后你可以切换,等等......)。
我没有添加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));
当为多行使用不同的布局时,这对我来说很好。