我有一个ListView
,其中我展示了一些细节,包括价格。
我需要在ListView
的底部显示总和。
到目前为止,我已尝试使用ListView
来显示详细信息,并使用单行显示表格布局以显示总数,问题是我无法将它们对齐。
你知道我能得到像这样的结果:
我知道" 缓存"不是总计,但想法是一样的。所有这些行显示它们的数量正确对齐,标签之间的空间和数量用点填充,这是我想要实现的结果,所以如果你能提供帮助,我将非常感激。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical" >
<ListView
android:id="@+id/detailsListView"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:dividerHeight="1dp" >
</ListView>
</LinearLayout>
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:stretchColumns="0,1" >
<TableRow android:padding="1dp" >
<TextView
style="@style/Control.Label.Large.Stretched"
android:layout_weight="1"
android:text="@string/total" />
<TextView
android:id="@+id/totalSumTextView"
style="@style/Control.TextView.Large.Stretched"
android:layout_weight="1"/>
</TableRow>
<TableRow android:id="@+id/tableRow3" />
</TableLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:stretchColumns="0,1" >
<TableRow android:padding="1dp" >
<TextView
style="@style/Control.Label.Small.Stretched"
android:layout_weight="1"
android:text="@string/item_quantity" />
<TextView
android:id="@+id/itemQuantityTextView"
style="@style/Control.TextView.Small.Stretched"
android:layout_weight="1" />
</TableRow>
<TableRow android:padding="1dp" >
<TextView
style="@style/Control.Label.Small.Stretched"
android:layout_weight="1"
android:text="@string/item_unit_price" />
<TextView
android:id="@+id/itemUnitPriceTextView"
style="@style/Control.TextView.Small.Stretched"
android:layout_weight="1" />
</TableRow>
<TableRow android:padding="1dp" >
<TextView
style="@style/Control.Label.Small.Stretched"
android:layout_weight="1"
android:text="@string/item_total" />
<TextView
android:id="@+id/itemTotalTextView"
style="@style/Control.TextView.Small.Stretched"
android:layout_weight="1" />
</TableRow>
</TableLayout>
</LinearLayout>
每个项目看起来应该是这样的:
它应该显示在ListView
下面的总数之和此图片来自我尝试做的事情。它是西班牙语,但它应该让你更好地了解我所说的内容。如您所见,ListView下面的行与上面的值不对齐。
答案 0 :(得分:2)
我认为,对于您想要做的事情,您应该为ListView
制作自定义布局,并在该布局中将TextView
元素与右侧对齐。
您的XML将包含以下内容:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="14.99$" />
</RelativeLayout>
TextView
与右侧对齐,添加您想要的任何内容,然后对ListView
中的每个元素使用布局,然后应对齐所有TextViews
。
android:layout_alignParentRight="true"
属性使TextView
(或具有该属性的任何视图)与右侧(在其父级内)对齐。
修改强>
对于点,你可以使用这个答案:https://stackoverflow.com/a/10282253/3290971
完整的布局文件类似于:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="wrap_content">
<TextView
android:id="@+id/item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Item"
android:textSize="20dp" />
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_toRightOf="@id/item"
android:layout_toLeftOf="@+id/price"
android:layout_alignBaseline="@+id/price"
android:background="@android:color/darker_gray" />
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="14.99$"
android:textSize="20dp" />
</RelativeLayout>
结果将是:
不是真正的点,但这是从一开始的,希望有所帮助。
答案 1 :(得分:2)
我在屏幕截图中看到了这些问题:
我认为这与使用TableLayout
有关。正如您在上一个示例中所看到的,我更喜欢使用RelativeLayout
。当你掌握它时,你会发现它非常强大。
我会使用下面的示例作为单行的起点,并在下面使用layout_below
标记将其放置在上面的行下方2个更相似的行。
像这个(长)例子一样:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp" >
<!-- ROW 1 -->
<TextView
android:id="@+id/tvLabel1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Cantidad Pedida" />
<TextView
android:id="@+id/tvSizeMb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/tvLabel1"
android:layout_alignParentRight="true"
android:text="12.0" />
<!-- ROW 2 -->
<TextView
android:id="@+id/tvLabel2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tvLabel1"
android:text="Unidad Medida" />
<TextView
android:id="@+id/tvSizeMb2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/tvLabel2"
android:layout_alignParentRight="true"
android:text="CJA" />
<!-- ROW 3 -->
<TextView
android:id="@+id/tvLabel3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tvLabel2"
android:text="Precio Unitario" />
<TextView
android:id="@+id/tvSizeMb3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/tvLabel3"
android:layout_alignParentRight="true"
android:text="157.6036" />
</RelativeLayout>
由于使用TextView
标记,您的layout_weight="1"
项目在列中居中。如果您改为使用上述RelativeLayout
,则文本视图本身将设置为右侧。
要正确对齐数字,有助于使用固定数量的小数点。在您的情况下,您可能需要4个小数位。
设置值时,您可能会执行以下操作:
myTextView.setText(String.valueOf(myNumber);
而不是使用String.format()
方法设置小数位数:
myTextView.setText(String.format("%.4f", myNumber);
有关详细信息,请查看此帖:
我希望得到一些使用stroke
样式的XML Drawable,但遇到了一些奇怪的问题。你可能想稍微谈谈这个概念。
然而,我过去多次做过的事情与ArianJM推荐的相似。
<View
android:layout_width="0dp"
android:layout_height="1px"
android:layout_alignBaseline="@+id/tvLabel1"
android:layout_toLeftOf="@+id/tvSizeMb1"
android:layout_toRightOf="@+id/tvLabel1"
android:background="#333"
tools:ignore="PxUsage" />
请注意使用px
代替dp
作为height属性。这样可以创建更清晰的图像,并且通过使用1px
值,线条不是很强。你可以通过使用稍微透明的颜色来改善这一点。
您可以使用基本的ListView
来显示您的商品。列表视图可以为每个项目使用自定义XML布局,使文本按照您希望的方式对齐。
例如,这里有一个RelativeLayout
,它按照您希望它们对齐的方式对齐2个文本字段:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp" >
<TextView
android:id="@+id/tvLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:text="Total" />
<TextView
android:id="@+id/tvSizeMb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:text="4.57MB" />
</RelativeLayout>
然后在列表视图下方,您需要显示&#34;缓存&#34;行。为此使用相同的布局,项目将正确对齐。
答案 2 :(得分:1)
@axel这就是我做的一个虚线:
在drawable文件夹中创建一个名为dotted.xml
的xml文件。复制并粘贴以下代码:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line" >
<stroke
android:dashGap="3dp"
android:dashWidth="3dp"
android:color="@android:color/darker_gray" />
</shape>
并在您的布局中使用background
属性
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_toRightOf="@id/item"
android:layout_toLeftOf="@+id/price"
android:layout_alignBaseline="@+id/price"
android:background="@drawable/dotted" />
如果上面的代码没有显示虚线,请将其添加到View
:
android:layerType="software"
希望有所帮助