ListView,显示底部总数的数字

时间:2014-10-07 18:05:41

标签: android android-listview android-ui android-tablelayout

我有一个ListView,其中我展示了一些细节,包括价格。 我需要在ListView的底部显示总和。 到目前为止,我已尝试使用ListView来显示详细信息,并使用单行显示表格布局以显示总数,问题是我无法将它们对齐。

你知道我能得到像这样的结果:

enter image description here

我知道" 缓存"不是总计,但想法是一样的。所有这些行显示它们的数量正确对齐,标签之间的空间和数量用点填充,这是我想要实现的结果,所以如果你能提供帮助,我将非常感激。

这是我目前用于我的活动的布局

<?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>

这是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" >

    <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>

每个项目看起来应该是这样的:

enter image description here

它应该显示在ListView

下面的总数之和

此图片来自我尝试做的事情。它是西班牙语,但它应该让你更好地了解我所说的内容。如您所见,ListView下面的行与上面的值不对齐。

enter image description here

3 个答案:

答案 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>

结果将是:

Layout result of the previous XML

不是真正的点,但这是从一开始的,希望有所帮助。

答案 1 :(得分:2)

我在屏幕截图中看到了这些问题:

  1. 列本身的对齐方式不同
  2. 列中文本的对齐方式是居中,而不是右对齐
  3. 您可能希望在数字输出中使用固定数量的小数点
  4. 一排点
  5. 1)列的对齐

    我认为这与使用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>
    

    2)右对齐列

    中的文本

    由于使用TextView标记,您的layout_weight="1"项目在列中居中。如果您改为使用上述RelativeLayout,则文本视图本身将设置为右侧。

    3)十进制数的固定格式

    要正确对齐数字,有助于使用固定数量的小数点。在您的情况下,您可能需要4个小数位。

    设置值时,您可能会执行以下操作:

    myTextView.setText(String.valueOf(myNumber);
    

    而不是使用String.format()方法设置小数位数:

    myTextView.setText(String.format("%.4f", myNumber);
    

    有关详细信息,请查看此帖:

    4)文本字段之间的点行

    我希望得到一些使用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"

希望有所帮助