如何按顺序对齐输出文本

时间:2013-03-22 17:24:37

标签: java android android-layout

我正面临以正确格式对齐文本的问题

EX: 说我要按以下方式打印出来

Name                     Phone No.
Adithya                  99999999999 
Ravi                     99999999999 
Teja                     99999999999
:
:

但由于字符串Adithya的长度不等于Ravi的长度,我们无法提供特定的间距,例如

String s = Name+ " " + Phone + "\n";

如果我这样做,我将按以下方式进行

Name                Ph
Adithya              9999999
Ravi              9999999
Tej              9999999
:
:

它将以这种方式显示。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

这个问题正是ListView的设计目标。

使用ListView,您可以将名称放在左侧,将电话放在右侧或任何其他方向。您可以轻松更改颜色,文本大小,字体等。 查找ListView的示例。易于使用的简单适配器非常适合这种实现。 你应该好好去。


我在此修改此答案是因为您在下面的评论中说明您希望格式化电子邮件和打印的电话号码列表,而不是屏幕显示。

由于以下几个原因,现在这是一个难题:

  • 电子邮件不遵守标签。
  • 标签不是最佳的,因为更长和更短的名称需要a 不同数量的制表符。

我能想到的电子邮件和常规打印输出的唯一解决方案是计算名称和电话号码列之间所需的空格字符数*并强制使用单字节字体打印,例如“Courier”等等

(*)如何计算列之间所需的空格数:选择电话号码列的行位置,即40个字符。任何特定行的姓名和电话之间所需的空格字符数为(40 - name.length())

您的代码将如下所示:

String text = "Phone List:";
for(i = 0; i < n; i++) {
    String name = names[i];
    String phone = phones[i];
    int nsp = 40 - name.length();
    text += "\n" + name + StringUtils.repeat(" ", nsp) + phone;
}

答案 1 :(得分:0)

您可以使用标签(\t):

String s = String.format("%s\t\t%s\n", Name, Phone);

这将在名称后输入两个标签,然后输入电话号码。 phonenumbers应该很好地对齐。

答案 2 :(得分:0)

我建议您使用Table Layout(它会保证您对齐),而不是让您的代码变得复杂。

以下是list view ROW的布局 您的编码部分将是相同的,只需切换到这个新的布局

   <?xml version="1.0" encoding="utf-8"?>
    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:stretchColumns="1">


        <TableRow
            android:id="@+id/tblRow1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"        
            android:padding="5dip">


      <TextView 
          android:id="@+id/tv_Name" 
          android:layout_width="0dip"
          android:layout_weight="3"   <!--it defines how much space this view should get in row-->
          android:text="Ravi"
          android:layout_height="wrap_content" 
          android:paddingLeft="20dip"
          android:textSize="14sp"
          android:textColor="@android:color/black"/>

       <TextView 
          android:id="@+id/tv_PhoneNumber" 
          android:layout_width="0dip"
          android:layout_weight="3"
          android:text="9999999999"
          android:layout_height="wrap_content" 
          android:paddingLeft="20dip"
          android:textSize="14sp"
          android:textColor="@android:color/black"/>   

      </TableRow>

    </TableLayout>

enter image description here

然后将此布局绑定到适配器,就像使用其他布局一样..