1

我需要在 ListView 中显示名称:值对的列表。我想将值与最长的名称宽度对齐。但是在接收到数据之前,名称的长度及其计数是未知的。

例如:

name1:          value1
name111:        value2
someOtherName:  value3
----------------------next ListView Item
name3:          value4
longestNameeee: value5
----------------------next ListView Item

现在,我已经创建了带有 LinearLayout 作为项目布局的适配器,并且我正在添加内部 LinearLayouts,其名称-值对的权重为 0.5 - 0.5(意味着值显示在布局中间之后)。但是如何根据最长名称长度设置名称 - 值权重?

4

2 回答 2

1

也许您可以考虑在列表视图行布局中使用相对布局并将名称左对齐和值右对齐?

另一种选择可能是可以使用 Paint.measureText 来测量文本长度 - 但需要设置与 textview 显示属性相同的绘制属性(textSize、texyStyle、font...) http://developer.android.com /reference/android/graphics/Paint.html#measureText(java.lang.String , int, int)

您应该能够使用它获得对文本长度的适当测量 - 它为您提供以像素为单位的 6 个像素,您可以使用它来设置列表行中所有名称 textViews 的布局参数。

于 2012-08-24T14:26:40.057 回答
0

您是否需要在最长的名称之后精确地开始这些值?或者只是为了能够显示最长的名字?好吧,我建议(并且在类似问题中所做的)不是使用 LinearLayout,而是使用 RelativeLayout。

在那里,您将定义两个 TextView,其中一个将在右侧具有重力。从我从您的代码中可以看出,正确的字段总是相同的大小,对吗?所以,根据它进行调整,让剩余的空间自由填充。我的一个示例布局:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/list_selector"
    android:orientation="horizontal"
    android:padding="3dip" >

<!-- Name-->
<TextView
    android:id="@+id/name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:textColor="#040404"
    android:typeface="sans"
    android:textSize="20dip"
    android:text="Name"
    android:textStyle="bold"/>

<!-- Amount -->
<TextView
    android:id="@+id/amount"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:gravity="right"
    android:layout_marginRight="5dip"
    android:text="money"
    android:textSize="20dip"
    android:textColor="#FF8B1500"
    android:textStyle="bold"
    />
</RelativeLayout>

右侧的 TextView 填充所需的空间,左侧用于名称。

希望我能帮助给出一个想法!

于 2012-08-24T14:20:55.120 回答