2013-06-12 37 views
1

我有一個表項,顯示兩個文本,一個左對齊,一個右對齊。目前,每個文本被放置在不同的TextViewAndroid的 - 如何使用SpannableString放置文本

enter image description here

我想只有一個TextView使用。對於這一點,我知道我可以使用SpannableString,但我有幾個小時試圖找出沒有成功的方式。

誰能告訴我怎麼可以把兩種文本在同一TextView對準一個向左,一個向右?

在此先感謝。

+0

你爲什麼要在同一個TextView的兩種文本?我不認爲你會找到一種簡單的方法來定位文本,而不使用單獨的視圖。你可以創建你自己的SpannableString,或者用一些黑色的空白內聯圖片大小來做,但是......爲什麼要麻煩? –

回答

0

這是我會做:

首先,你需要衡量右側的文本lenght。

  float textsize = messageview.getPaint().getTextSize(); 
       int lenght = int lenght = textsize * text.length(); 

在使用leadingMarginSpan後:

public class leadingMarginSpan2 implements LeadingMarginSpan.LeadingMarginSpan2{ 
     private int margin; 
     private int lines; 

     public leadingMarginSpan2(int lines, int margin){ 
      this.lines = lines; 
      this.margin = margin; 
     } 
     @Override 
     public void drawLeadingMargin(Canvas arg0, Paint arg1, int arg2, 
       int arg3, int arg4, int arg5, int arg6, CharSequence arg7, 
       int arg8, int arg9, boolean arg10, Layout arg11) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public int getLeadingMargin(boolean first) { 
      if(first){ 
       return margin; 
      } 
      else{ 
       return 0; 
      } 
     } 

     @Override 
     public int getLeadingMarginLineCount() { 
      return lines; 
     } 

    } 

設置跨度:

spantext.setSpan(new leadingMarginSpan2(1, getWidth() - lenght), 0, text.lenght, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
+0

當你說右側文本的長度,你的意思是從右側文本的數量或字符? –

+1

他代碼獲取文本大小設置,在縮放的像素,並且通過字符數相乘。結果是文本的寬度的近似值,但不是確切的。使用getTextBounds()會更準確,然後獲取Rect的寬度。你確定你不想使用兩個TextView嗎? :) –

+0

@Jorge Gil是的,我的意思是數字。 – user1888162

相關問題