2016-05-10 6 views
-1

## spannableはonclickのリスナーの外部からのデータにアクセスすることができないように、全体コードをクリックリスナー##次のコードでspannableを複数回実装する方法は?

rd.setOnClickListener(新しいView.OnClickListener(){

 @Override 
     public void onClick(View view) { 
      int clicked=0; 
      clicked++; //< click counter> 


      String extract=tv2.getText().toString(); 
      int startIndex=tv2.getSelectionStart(); 
      int endIndex=tv2.getSelectionEnd(); 
      extract=extract.substring(startIndex,endIndex); 
      ClipboardManager clipboardManager=  (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); 
      clipboardManager.setText(extract); // <Textview selection and clipboard > 



      int length = extract.length(); 

      Spannable spannable=new SpannableString(extract); 

      spannable.setSpan(new BackgroundColorSpan(Color.GREEN), 0, length, 0); 
         // spannable to set the background color 

      String nsb98=tv2.getText().toString(); 
      int length2=nsb98.length(); 
      String nsb97=nsb98.substring(0,startIndex); 
      String nsb96=nsb98.substring(endIndex,length2); 
      tv2.setText(TextUtils.concat(nsb97, spannable,nsb96));// 

に内部書かれています <>

  if (clicked>0){ } } 

+0

...あなたの問題は...ですか? – pskink

+0

テキストビューの一部を選択してrdボタンをクリックすると、そのテキストが強調表示されます。しかし、それは1回だけ働く。他の部分を強調表示しようとすると、最初のスパナブルがリセットされ、新しいスパナブルが強調表示されます。私は1つのstartIndexとendindexを保存することができます。複数のstartIndexとendIndexを格納できるので、複数のハイライト表示が可能なようにループを作成する方法は? –

+0

質問をより明確にするには、上記のコメントを質問本体に追加してください。また、 '次のコード'を 'EditText'に置き換えたほうがよいでしょう – Ashis

答えて

0

あなたに以下のコードを使用します、それはあなたに望ましい結果を与えるはずです。

Editable text = tv2.getText(); 
Spannable raw = new SpannableString(text); 
BackgroundColorSpan[] spans = raw.getSpans(0, raw.length(), BackgroundColorSpan.class); 

final SpannableStringBuilder sb = new SpannableStringBuilder(text.toString()); 

for (BackgroundColorSpan span : spans) { 
    sb.setSpan(span, text.getSpanStart(span), text.getSpanEnd(span), text.getSpanFlags(span)); 
} 
sb.setSpan(new BackgroundColorSpan(Color.GREEN), tv2.getSelectionStart(), tv2.getSelectionEnd(), 0); 

tv2.setText(sb); 
+0

ありがとうございます!それは魅力のように働いた –

関連する問題