2011-02-10 92 views
0

我有一個從數據庫中獲取字符串並將其設置爲標籤的應用程序。現在我想讓該標籤強調一個單詞,如「這個單詞應該加下劃線」。我希望能夠點擊該下劃線字詞並獲得其價值。因此,在將數據發送到數據庫之前或之後,我將它設置好。謝謝你的幫助。我嘗試下面的代碼,因爲for循環,每行都被高亮顯示。請幫助android dev如何在字符串中像鏈接顏色那樣加下劃線和更改單詞的顏色

SpannableStringBuilder builder = new SpannableStringBuilder(); 
      for(int i=0;i<ListClass.getLatestActivity().size();i++){ 
       String myString = ListClass.getLatestActivity().get(i); 
       builder.append(myString); 
       String substringThatShouldBeClickable = myString.substring(0,myString.indexOf(' ')).trim(); 
       MySpan span = new MySpan(substringThatShouldBeClickable); 
       span.setOnMySpanClickListener(mySpanOnClickListener); 

       int start = 0; 
       int end = builder.length(); 

       builder.setSpan(span, start, end, 0); 
       builder.append("\n" + "\n") ; 
      } 
      RAInfo.setText(builder);  
      RAInfo.setMovementMethod(LinkMovementMethod.getInstance()); 
+0

你能解釋一下「獲得它的價值」是什麼意思?大概添加你想要的截圖會有所幫助。 – kikito 2011-02-10 15:06:20

+0

在發送到數據庫之前=靜態字符串名稱=「我的名字是鮑勃」 從數據庫讀取設置標籤=「我的名字是鮑勃」 我希望鮑勃加下劃線和藍色。那麼應該在數據庫插入之前還是之前設置?我會怎麼做呢? – user516883 2011-02-10 15:12:10

回答

1

好的,所以你需要做幾件事情。他們完成這個任務的方式是在TextView中使用span。

首先,您需要擴展ClickableSpan類:

public class MySpan extends ClickableSpan { 
    public interface OnMySpanClickListener { 
      public void onMySpanClick(String tag); 
    } 

    private final String myData; 
    private OnMySpanClickListener mOnMySpanClickListener; 

    public MySpan(String tag) { 
      super(); 
      if (tag == null) { 
        throw new NullPointerException(); 
      } 
      myData = tag; 
    } 

    @Override 
    public void onClick(View widget) { 
      if (mOnMySpanClickListener != null) { 
       mOnMySpanClickListener.onMySpanClick(myData); 
      } 
    } 

    public OnMySpanClickListener getOnMySpanClickListener() { 
      return mOnMySpanClickListener; 
    } 

    public void setOnMySpanClickListener(OnMySpanClickListener onMySpanClickListener) { 
      mOnMySpanClickListener = onMySpanClickListener; 
    } 
} 

您的活動,您將設置TextView的像這樣的文字:

String myString = getFromDatabase();  

SpannableStringBuilder builder = new SpannableStringBuilder(); 
builder.append(myString); 

//You'll need to call the constructor for MySpan with only the value of the part 
//of the string that you want to work with ("Bob" in the example), however you 
//determine that. 
String substringThatShouldBeClickable = getMySubstring(myString); //"Bob" 
MySpan span = new MySpan(substringThatShouldBeClickable); 
span.setOnMySpanClickListener(mySpanOnClickListener); 

//start and end control the range of characters in the string that are clickable, 
//so modify this part so it only underlines the characters you want clickable 
int start = 0; 
int end = bulider.length(); 

builder.setSpan(span, start, end, 0); 

label.setText(builder); 
label.setMovementMethod(LinkMovementMethod.getInstance()); 

最後,你會需要一個處理程序的點擊事件跨度:

MySpan.OnMySpanClickListener mySpanOnClickListener = new MySpan.OnMySpanClickListener() { 
    public void onMySpanClick(String tag) { 
     //Here is where you'll do your work with the value in the String "tag" 
    } 
}; 

希望這會有所幫助。