2011-02-10 2 views
0

私はデータベースから文字列を取得し、ラベルに設定するアプリケーションを持っています。今、私はそのラベルに「この単語に下線を引く」のような1つの単語に下線を引いてほしい。私はその下線の言葉をクリックしてその価値を得ることができるようにしたい。だから私はそれをデータベースに送る前に設定するか、後に設定します。助けてくれてありがとう。私は以下のコードを試して、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

+0

データベースに送る前に=静的String Name = "私の名前はBob" データベースから読み取ってラベルを設定する= "私の名前はボブ" 私はボブに下線を引いて青くします。これは、データベース挿入の前または前に設定する必要がありますか?それはどうやってやるの? – user516883

答えて

1

あなたがする必要があることはいくつかあります。これを達成する方法は、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()); 

、あなたがよ:

あなたの活動に
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のテキストを設定します:

まずはClickableSpanを拡張するクラスが必要になりますスパンのクリックイベントのハンドラが必要です。

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" 
    } 
}; 

希望します。

+0

mySpanOnclicklistnerはどこに行くのですか?助けてください、ありがとう! – user516883

+0

これはクラスの内部にありますが、メソッドの外部にあります。以下の例をご覧ください:https://github.com/maxpower47/PinDroid/blob/master/src/com/pindroid/activity/ViewBookmark.java – maxpower47

関連する問題