2013-01-22 45 views
3

我想創建一個應用程序,細節在我的應用程序界面,這個最好的設計模式,我可以想像的是Android的默認應用程序細節屏幕,該屏幕在屏幕截圖enter image description here應用細節畫面的Android

現在這裏的問題出是,我不知道如何創建這些鍵值對之間的"................"部分,該虛線部分應該是靈活的捕獲增加或縮小按文本的大小兩側

例如

場景1:

Total..........2MB(10點+文本)

場景2:

Total........200KB(8點+文本)

所以點被調整爲每文本大小。

有人可以建議我如何實現這一點,也請如果你知道一些更好的方式(模式)在應用程序細節的情況下顯示key-value對,這是非常受歡迎的。

回答

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,你只是一個點,並設置重複添加圖像=」真正」。

第二次編輯:更合適的解決方案可能是添加一個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

不幸的是這個答案是行不通的,因爲9-補丁會拉伸,而不是增加對之間的點數 –

+1

是的,剛剛意識到我也更新了我的答案,並建議使用xml形狀定義創建的重複位圖 – WarrenFaith

+0

k!必須試試這個... –

0

雖然我不知道,不過它來在我的腦海,我們也能做到這一點如下,

你定義字符串的總長度你要在屏幕上打印/顯示。

假設你定義了它20.現在你有兩個例子,讓我通過一個例子來告訴你。

STR1 =總

STR2 = 200KB

您現在可以添加另一個字符串,如

STR3 = 「」;

爲(I = 0;我<(20-str1.length() - str2.length))

STR3 + =; 「」

現在你有三個字符串作爲「Total」,「200KB/20KB」和「dots/...」,你可以在單個TextV或多個TextViews的幫助下打印它們。

你也可以嘗試計算總長度而不是20。正如我所說,我不知道,所以請無反對票:P

+3

這將適用於固定寬度的字體,但不適用於寬度可變的字體。 – iagreen

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)

%1$-20s 

打印對齊( - ),用20個字符的最大寬度(20 )作爲一個字符串。

%2$15.2fKB\n 

打印的第二個參數($ 2),用15個字符(15)和2個小數點(0.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:不要在第一列的名字覆蓋合法的空間;)