应用详情屏幕android

时间:2013-01-22 15:40:03

标签: android android-layout

我想在我的应用程序中创建一个应用程序详细信息屏幕,对于这个最好的设计模式我可以想象是android的默认应用程序详细信息屏幕,它显示在屏幕截图enter image description here

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

e.g。

方案1:

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

方案2:

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

因此根据文字大小调整点数。

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

3 个答案:

答案 0 :(得分: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,只需添加一个带有一个点的图像并设置repeat =“true”。

第二次修改:更合适的解决方案可能是添加shape作为背景。形状可能是那样的(未经测试):

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

我认为你需要稍微调整一下这些值,但它应该有效。

答案 1 :(得分: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

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

%2$15.2fKB\n

将第二个参数(2 $)打印为最大宽度为15个字符(15)和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:不要覆盖第一列名称中的合法空格;)

答案 2 :(得分:0)

虽然我当然不是,但我仍然想到我们也可以按照以下方式实现这一目标,

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

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

  

Str1 =总计

     

Str2 = 200KB

     

您现在可以添加其他字符串,例如

     

Str3 =“”;

     

为(I = 0; I&≤(20-str1.length() - str2.length))

     

str3 + =“。”;

     

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

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