EditTextのユーザー入力テキストが自動的に各行接頭辞「*」を追加する必要がある場合。EditText各行の接頭辞
例:
*ライン最初のいくつかのテキスト、私はそれを行うことができますどのように
を持ついくつかのテキスト
*二行目?
EditTextのユーザー入力テキストが自動的に各行接頭辞「*」を追加する必要がある場合。EditText各行の接頭辞
例:
*ライン最初のいくつかのテキスト、私はそれを行うことができますどのように
を持ついくつかのテキスト
*二行目?
:あなたの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;
}
}
すごい!どうもありがとうございます!あなたはスーパーマンです!)ありがとう男) – researcher
ユーザが入力しているときにこのようにしたい場合は、onTextChanged()
またはafterTextChanged()
コールバックでTextWatcherを使用します。
また、テキストを変更して次のEditText
に移動した後にその値を使用したい場合は、アスタリスクを自分で追加してください。アスタリスクは、編集可能なテキストの一部にしたくないので、私たちは、各行の先頭にそれを描くことができます
@Override
public void afterTextChanged(Editable s) {
if(!s.toString().startsWith("*")){
yourEditText.setText("*" + yourEditText.getText().toString());
}
}
これは、ユーザーが入力しているときに発生します。私はTextWatcherを使用しようとします。私はすべての行を数え、それぞれをStringとして取得し、接頭辞を追加してから、StringBuilderを使用して1つのString内のすべての行を追加して、テキストをクリアします。 – researcher
あなたはそれが実際のテキストの一部になりたいです。すなわち、コピー可能、削除可能などであるか?それともIDEの行番号のようにしたいですか? –
@MikeM。レスポンスありがとう。私は、ユーザーがフィールドのいくつかのテキストをシンボルの先頭に追加された各行に入力/削除したときにそれを必要とします。 – researcher
あなたの例の最初の行を選択してコピーします。アスタリスクを付けずに "\ * line first some text"、あるいは単に "line first some text"をコピーすべきでしょうか?つまり、編集可能なテキストの「\ *」部分ですか?はいの場合は削除できますか? –