2013-03-22 56 views
0

我對着在正確的格式對齊文本問題如何對齊輸出文本,以便

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

它會以這種方式顯示。我該如何解決這個問題?

+0

使用自定義列表視圖的頂部和電話號碼下面的名稱。您可以設置字體大小。 – Raghunandan 2013-03-22 17:27:08

+0

以兩個TextViews而不是在一個顯示它們.. – Pragnani 2013-03-22 17:35:36

+0

問題是當在電子郵件或打印機中獲取輸出時,而不是在活動中顯示它時 – user1785693 2013-03-22 17:36:47

回答

0

此問題正是爲ListView設計的。

使用ListView,您可以將名稱放在左側,將電話放在右側或任何其他方向。您可以輕鬆更改顏色,文字大小,字體等。 查找ListView的示例。易於使用的簡單適配器非常適合此實現。 你應該很好走。


我在這裏修改這個答案,因爲你在下面,你要格式化手機號碼列表的電子郵件和打印,而不是在屏幕上顯示的註釋說明。

現在這是有幾個原因的一個難題:

  • 電子郵件不服從選項卡。
  • 製表符不是最佳選項,因爲長名稱和短名稱將需要不同數量的製表符。

我能想到的電子郵件和普通打印輸出的唯一的解決辦法是計算的空格字符的姓名和電話號碼列*和力印刷用單一空間字體之間必要的數字,如「快遞「等。

(*)如何計算列之間所需的空格數量:爲電話號碼列選擇行位置,即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; 
} 
+0

不好使用ListView直到它是必要的。因爲ListView具有很多優化和回收功能。對於這樣的小事情。帶有滾動視圖的LinearLayout或TableLayout是最佳選擇 – Pragnani 2013-03-22 17:32:14

+0

好點@Pragnani。兩種方法都可以工作。但我仍然認爲ListView更好。這是因爲對每列或TableLayout使用LinearLayout將需要兩個單獨的並行列表:一個用於名稱,一個用於電話號碼。這既是糟糕的編程,也是因爲列表可能不同步,並且如果列表中的任何項目換行,將導致錯位。另外,一旦習慣了SimpleAdapter ListView的開銷和開發工作,它的代價並不是很高。 – 2013-03-22 17:35:22

+0

這個問題是在將字符串發送到電子郵件或打印機時,而不是在活動中顯示的時候。 – user1785693 2013-03-22 17:38:58

0

你可以使用標籤(\t):

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

這將輸入的名稱,然後PHONENUMBER後兩個選項卡。電話號碼應該很好地對齊。

+0

不幸的是,這會失敗,因爲a)選項卡字符通常作爲電子郵件中的固定數量的空格處理,b)更長和更短的名稱將需要不同數量的製表符。 – 2013-03-22 17:57:23

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

像你這樣做佈局然後綁定到您的適配器其他佈局..