我一直在查看Stackoverflow
上的内容,但无法了解如何执行此操作。
我想要的是这样的:
xxxxxxxx
--------
xxxx
--------
xx
而不是通常的
xxxxxxxx
----------------------------------- (until end of screen)
xxxx
-----------------------------------
xx
我想知道是否有一种非常简单的方法可以做到。
我认为这涉及到改变正确的保证金,但这就是我所得到的。
我顺便在运行时创建ListViews
。
答案 0 :(得分:1)
您应该使用自定义drawable执行类似的操作:
<ListView
android:divider="@drawable/fancy_gradient"
android:dividerHeight="@dimen/divider_height"...
Java方式:
list = (ListView) findViewById(R.id.list);
int[] colors = {0, 0xFF97CF4D, 0};
ListView inner = list.getRefreshableView();
inner.setDivider(new GradientDrawable(Orientation.RIGHT_LEFT, colors));
inner.setDividerHeight(1);
但似乎分隔宽度不可自定义......
答案 1 :(得分:1)
由于您无法以编程方式直接更改分隔线宽度,因此建议您编写一个带有字符串列表的适配器。适配器将由一个TextView和一个ImageView(最好)组成。
在适配器中,您可以比较字符串并获得最长的字符串。获取该最长字符串的估计宽度;
String longestText = "longestword";
Paint paint = new Paint();
float widthValue = paint.measureText(longestText);
(这将以像素为单位给出结果)并且在获得此值之后,您可以简单地在textview下放置(height = x,width = widthValue)的imageview。
然后从xml中删除listview中的分隔符;
android:divider="@android:color/transparent"
您想要的视图已准备好使用。
答案 2 :(得分:0)
我认为它能够发挥作用。它似乎工作。 我就是这样做的。
ListAdapter listAdapter = posList.getAdapter();
//base case
int longestWidth = listAdapter.getView(0, null, posList).getMeasuredWidth();
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, posList);
listItem.measure(0, 0);
//check if the items in the list are longer than base case
if (listItem.getMeasuredWidth() > longestWidth)
{
longestWidth = listItem.getMeasuredWidth();
}
}
ViewGroup.LayoutParams params = posList.getLayoutParams();
//assign width of textview to longest item in the list
params.width = longestWidth;