2016-07-21 21 views
2

\ n \ t \ rなどの特殊文字のスパンを設定する方法は?私はこれを行う場合は今:EditText setSpan(特殊文字用)

getText().setSpan(DynamicListView.mBackgroundColor, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

を特殊文字'\n' ND '\r'が改行されているようおかげで

答えて

0

100%は確かに私は、質問を理解していないので、彼らは目に見えないだろうとどのようにそれらがスタイリングすることができ?

つまり、EditTextの中に特定のcharをスタイリングする方法があります。メソッドの最後に好きなだけ多くの文字を追加することができ、それらの文字のインスタンスはすべてスタイル付けされます。図形描画機能によって私の側に固定

//... 
editText.setText(getSpannedText(editText.getText(), `u`, `r`)); 
//... 
private static SpannableString getSpannedText(String text, char... triggers) { 

    SpannableString spanString = new SpannableString(text); 

    for (int i = 0; i < spanString.length(); i++) { 
     for (char trigger : triggers) { 
      if (spanString.charAt(i) == trigger) { 
       spanString.setSpan(new ForegroundColorSpan(Color.CYAN), i, i+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
      } 
     } 
    } 

    return spanString; 

} 
+0

はい、私はほぼ同じ溶液を使用していますが。はい、\ nと\ rは見えませんが、\ tは表示され、スペースのように見えますが、Spanはこの文字 "\ t"に対して正確に動作していません。 – molds

+0

@ user3901709スパンを設定する前に '' \ t''文字をスペースのようなものに置き換えるのは現実的ですか? (文字列= string.replace( '\ t'、 ''); ' – PPartisan

+0

残念ながらこれを行うことはできません、bcz後でこのデータをファイルに保存する必要があります(ファイルリーダーです)。 – molds

0

、ここでのEditTextのコードです:

if(getText().toString().substring(start,end).indexOf("\t")>=0 
      || getText().toString().substring(start,end).indexOf("\n")>=0 
      || getText().toString().substring(start,end).indexOf("\r")>=0) { 
     TextPaint paint = new TextPaint(); 
     paint.setStyle(Paint.Style.FILL); 
     paint.setColor(mBackgroundColor); 
     paint.bgColor = mBackgroundColor; 

     Layout layout = getLayout(); 
     int line = layout.getLineForOffset(start); 
     int baseline = layout.getLineBaseline(line); 
     int ascent = layout.getLineAscent(line); 
     float x = layout.getPrimaryHorizontal(start); 
     float y = baseline + ascent; 

     Rect rect = new Rect(); 
     //rect.set(start, 0, Math.round(layout.getSecondaryHorizontal(end)), getLineHeight()+5); 
     rect.set(start, 0, Math.round(layout.getSecondaryHorizontal(end)), getLineHeight()+5); 
     rect.offset(Math.round(x), Math.round(y)); 

     Log.d("debug","tabs " + rect.toString()); 
     canvas.drawRect(rect, paint); 
    }