2016-03-21 15 views
1

EditTextのユーザー入力テキストが自動的に各行接頭辞「*」を追加する必要がある場合。EditText各行の接頭辞

例:

*ライン最初のいくつかのテキスト、私はそれを行うことができますどのように

を持ついくつかのテキスト

*二行目?

+0

あなたはそれが実際のテキストの一部になりたいです。すなわち、コピー可能、削除可能などであるか?それともIDEの行番号のようにしたいですか? –

+0

@MikeM。レスポンスありがとう。私は、ユーザーがフィールドのいくつかのテキストをシンボルの先頭に追加された各行に入力/削除したときにそれを必要とします。 – researcher

+0

あなたの例の最初の行を選択してコピーします。アスタリスクを付けずに "\ * line first some text"、あるいは単に "line first some text"をコピーすべきでしょうか?つまり、編集可能なテキストの「\ *」部分ですか?はいの場合は削除できますか? –

答えて

1

:あなたのafterTextChanged()あなたはの線に沿って何かを行うことができますで

。これを行うには、EditTextをサブクラス化し、onDraw()メソッドをオーバーライドして、行を繰り返し、各行の境界を突き止めて文字を描画する場所を決定します。アスタリスクを描画した後、我々はその後、テキスト、カーソル、選択の描画を終了するにはEditTextを許可するようにsuper.onDraw()メソッドを呼び出すなど

public class StarredEditText extends EditText { 
    private static final String ASTERISK = "*"; 

    private float padding; 
    private Paint paint; 

    public StarredEditText(Context context) { 
     this(context, null); 
    } 

    public StarredEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     paint = getPaint(); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     int baseline; 
     final int count = getLineCount(); 

     for(int i = 0; i < count; i++) { 
      baseline = getLineBounds(i, null); 
      canvas.drawText(ASTERISK, padding, baseline, paint); 
     } 

     super.onDraw(canvas); 
    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     Rect rect = new Rect(); 
     getLineBounds(0, rect); 
     padding = (rect.left - paint.measureText(ASTERISK))/2; 
    } 
} 
+1

すごい!どうもありがとうございます!あなたはスーパーマンです!)ありがとう男) – researcher

0

ユーザが入力しているときにこのようにしたい場合は、onTextChanged()またはafterTextChanged()コールバックでTextWatcherを使用します。

また、テキストを変更して次のEditTextに移動した後にその値を使用したい場合は、アスタリスクを自分で追加してください。アスタリスクは、編集可能なテキストの一部にしたくないので、私たちは、各行の先頭にそれを描くことができます

@Override 
    public void afterTextChanged(Editable s) { 
     if(!s.toString().startsWith("*")){ 
      yourEditText.setText("*" + yourEditText.getText().toString()); 
     } 

    } 
+0

これは、ユーザーが入力しているときに発生します。私はTextWatcherを使用しようとします。私はすべての行を数え、それぞれをStringとして取得し、接頭辞を追加してから、StringBuilderを使用して1つのString内のすべての行を追加して、テキストをクリアします。 – researcher

関連する問題