1

EditText で既に設定したテキストの後にユーザー入力テキストが必要ですが、このテキストはユーザーが削除できません。

たとえば、テキスト「Name :」を EditText 内に設定すると、ユーザーは「Name :」の後に名前を入力します。

4

2 に答える 2

2

あなたはこれに間違った方法で近づいています。

TextView必要な機能は、 (可変テキスト)と(可変テキスト)の動作を組み合わせることですEditTextEditText に 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:" />

これにより、次のようになります。

ここに画像の説明を入力

于 2012-12-28T19:52:02.993 に答える
1

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);
    }
}
于 2013-11-25T15:56:29.637 に答える