EditText で既に設定したテキストの後にユーザー入力テキストが必要ですが、このテキストはユーザーが削除できません。
たとえば、テキスト「Name :」を EditText 内に設定すると、ユーザーは「Name :」の後に名前を入力します。
EditText で既に設定したテキストの後にユーザー入力テキストが必要ですが、このテキストはユーザーが削除できません。
たとえば、テキスト「Name :」を EditText 内に設定すると、ユーザーは「Name :」の後に名前を入力します。
あなたはこれに間違った方法で近づいています。
TextView
必要な機能は、 (可変テキスト)と(可変テキスト)の動作を組み合わせることですEditText
。EditText に TextView を実際に配置することでこれを行います。
相対レイアウトを使用して、
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="43dp"
android:paddingLeft="54dp"
android:ems="10" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:layout_alignLeft="@+id/editText1"
android:layout_alignBaseline="@+id/editText1"
android:text="Name:" />
これにより、次のようになります。
InputFilterを使用して、いくつかの基本的な考え方に従います。
static class InnerFieldLabelHelper implements InputFilter, View.OnTouchListener {
private final CharSequence label;
private EditText editText;
InnerFieldLabelHelper(CharSequence label) {
this.label = label;
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
CharSequence result;
if (dest.length() < label.length()) {
result = label.subSequence(label.length() - 2, label.length());
} else if (dstart >= label.length() - 1) {
result = source;
} else {
result = "";
}
resetPositionIfNecessary();
return result;
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
boolean result = false;
if (view.equals(editText)) {
result = resetPositionIfNecessary();
}
return result;
}
public boolean resetPositionIfNecessary() {
boolean result = false;
if (editText.length() >= label.length() && editText.getSelectionStart() < label.length()) {
editText.setSelection(label.length());
editText.requestFocus();
result = true;
}
return result;
}
public void configure(EditText editText) {
this.editText = editText;
this.editText.setText(label);
this.editText.setSelection(label.length());
this.editText.setFilters(new InputFilter[]{ this });
this.editText.setOnTouchListener(this);
}
}