3

我想在我的应用程序中创建一个应用程序详细信息屏幕,因为我能想象到的最佳设计模式是 android 的默认应用程序详细信息屏幕,如屏幕截图所示在此处输入图像描述

现在这里的问题是,我不知道如何"................"在这些键值对之间创建部分,该虚线部分应该可以灵活地捕获以根据双方文本的大小来增加或缩小

例如

场景1:

Total..........2MB (10 点 + 文字)

方案 2:

Total........200KB (8 点 + 文字)

所以点会根据文本大小进行调整。

任何人都可以建议我如何实现这一点,如果您知道一些更好的方式(模式)key-value在应用程序详细信息场景中显示配对,也欢迎。

4

3 回答 3

2

这很简单(虚拟布局):

<RelativeLayout>
    <TextView parentLeft="true"/>
    <TextView parentRight="true"/>
    <Textview background="@drawable/one_dot_repeat"
        toRightOf="@id/firstTextView"
        toLeftOf="@id/secondTextView"
        layout_width="match_parent"> <!-- or any other view -->
</RelativeLayout>

编辑:也许 9patch 并不完美,但您可以创建一个 xml,您只需添加一个带有一个点的图像并设置重复 =“true”。

第二次编辑:更合适的解决方案可能是添加一个形状作为背景。形状可能是这样的(未经测试):

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line" >
    <size
        android:width="500"
        android:height="1" />
    <solid
        android:color="@color/black" />
    <stroke
        android:width="1"
        android:color="@color/white"
        android:dashWidth="1"
        android:dashGap="1" />
</shape>

我认为您需要稍微调整一下这些值,但它应该可以工作。

于 2013-01-22T15:45:04.113 回答
2

java.util.Formatter救援:

格式化程序可以左对齐要打印的文本,您可以为其分配宽度,因此它将用空格填充文本,使其占据所有所需的宽度,然后您只需用点替换空格。这是一个例子:

import java.util.*;

public class Test
{
        public static final synchronized strictfp void main(String[] args)
        {
                Map<String, Double> myData = new LinkedHashMap<String, Double>();
                myData.put("Total", 24.0);
                myData.put("App", 24.0);
                myData.put("USB storage app", 0.0);
                myData.put("Data", 0.0);
                myData.put("SD card", 0.0);


                for(Map.Entry myEntry : myData.entrySet())
                {
                        Formatter myFormatter = new Formatter();
                        myFormatter.format("%1$-20s%2$15.2fKB", myEntry.getKey(), myEntry.getValue());
                        System.out.println(myFormatter.toString().replace(' ', '.'));
                }
        }
}

这里有趣的部分是格式字符串:

%1$-20s

将最大宽度为 20 个字符 (20) 的第一个参数 (1$) 左对齐 (-) 打印为字符串 (s)。

%2$15.2fKB\n

将最大宽度为 15 个字符 (15) 和 2 个小数点 (.2) 的第二个参数 (2$) 打印为浮点数 (f)。

这意味着第一个值将始终固定为 20 个字符,第二个值将始终固定为 15 个字符。那么所有的行总是 35 个字符长 + KB 后缀 + 浮点数的小数点。

上面的代码产生输出:

Total.........................24.00KB
App...........................24.00KB
USB.storage.app................0.00KB
Data...........................0.00KB
SD.card........................0.00KB

TODO:不要覆盖第一列名称中的合法空格;)

于 2013-01-22T16:31:21.053 回答
0

虽然我不确定,但我仍然想到我们也可以通过以下方式实现这一目标,

您定义要在屏幕上打印/显示的字符串的总长度。

假设你定义它 20. 现在你有两种情况,让我通过一个例子告诉你。

Str1 = 总计

Str2 = 200KB

您现在可以添加另一个字符串,例如

STR3 =“”;

for(i=0;i<(20-str1.length()-str2.length))

str3 +=".";

现在你有了三个字符串,分别是“Total”、“200KB/20KB”和“dots/...”,你可以在单个 TextV 或多个 TextView 的帮助下打印它们。

您也可以尝试计算总长度而不是 20。正如我所提到的,我不确定,所以请不要投反对票:P

于 2013-01-22T15:55:27.820 回答