web-dev-qa-db-ja.com

edittextに触れたときにヒントを消す方法は?

私のアプリケーションではAndroidには多くのEditTextフィールドがあります。ヒントに問題が発生しました。EditTextにフォーカスがあると消えませんが、何かを書き始めると消えます。問題は修正されますか?EditTextフィールドをタッチすると消えるヒントが必要だからです。

たとえば次のとおりです。

<EditText
    Android:layout_width="260dp"
    Android:layout_height="30dp"
    Android:ems="10"
    Android:inputType="text"
    Android:id="@+id/driv_lic_num_reg"
    Android:hint="@string/driver_license_numb"
    Android:textColor="@color/black"
    Android:textColorHint="@color/grey_hint"
    Android:background="@drawable/input_field_background"
    Android:layout_alignParentTop="true"
    Android:layout_centerHorizontal="true"
    Android:layout_margin="2dp"
    Android:textCursorDrawable="@color/black"
    Android:textSize="15dp"
    Android:paddingLeft="10dp"
    Android:nextFocusDown="@+id/pass_reg"
    Android:imeOptions="actionNext"
    Android:maxLines="1"
    Android:maxLength="50"
    Android:focusableInTouchMode="true"/>
35
ToRaRo

ヒントは、フォーカスではなくテキストを入力したときにのみ消えます。私はそれを行うための自動的な方法があるとは思わない、私が間違っているかもしれない。ただし、回避策として、次のコードを使用してEditTextのフォーカスに関するヒントを削除します

myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus)
            myEditText.setHint("");
        else
            myEditText.setHint("Your hint");
    }
});
43
Rohan Kandwal

Selectorを使用してXMLコードをカスタマイズすることもできます。コードの例を次に示します。

セレクターを作成します。ファイル内selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_focused="true" Android:color="@Android:color/transparent" />
    <item Android:color="@color/gray" />
</selector>

あなたの見解では

Android:textColorHint="@drawable/selector"
65
windyzboy

ここに私のソリューションがあります。ユーザーがeditTextにフォーカスするとヒントが消え、edittextがまだ空の場合にフォーカスが他の場所に変わると再び表示されます。

editText.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        editText.setHint("");
        return false;
    }
});

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            editText.setHint("Hint");
        }
    }
});

これが誰かを助けることを願って

9
Hugo

これは私の解決策です:

final EditText editText = (EditText) findViewById(R.id.activity_edittext);
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            editText .setHint("my little hint");
        } else {
            editText .setHint("");
        }
    }
});
4
Pascal Klein

Windyzboyが提案したセレクターソリューションは、カーソルが中央に移動するのではなく、透明なヒントテキストの後ろに留まるため、中央に配置されたテキストのあるEditTextsでは機能しません。

コードを汚染しない良い方法は、カスタムEditTextを作成することです。おそらく、アプリケーション全体で同じスタイルが必要になるからです。これにより、各EditTextに個別にチェックを追加することを回避できます。

public class HideHintEditText extends EditText {

    CharSequence hint;

    public HideHintEditText(Context context) {
        super(context);
        hint = this.getHint();
    }

    public HideHintEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        hint = this.getHint();
    }

    public HideHintEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        hint = this.getHint();
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect);

        this.setHint(focused ? "" : hint);
    }

}
3
Ish

試して

EditText editText = (EditText) findViewById(...);
editText.setHint("");

onTouchロジックで。
ただし、編集テキストをクリックしたときは、ヒントが消えている必要があります。 再チェックアプリのロジック。

1

私の解決策はこのようなものです。空でフォーカスされていないときにヒントを表示し、テキストがある場合やタッチされている場合は非表示にします

fun hideHint() {
        tilFloating.isHintAnimationEnabled = false
        etFloating.onFocusChangeListener = OnFocusChangeListener { v, hasFocus ->
            if ((etFloating.text != null && etFloating.text.toString() != "") || hasFocus)
                tilFloating.hint = ""
            else
                tilFloating.hint = mHint
        }
    }
Android:hint="User Name"

このコード行は簡単に実行できます!

<EditText
  Android:id="@+id/edtUserName"
  Android:layout_width="match_parent"
  Android:layout_height="50dp"
  Android:layout_weight="1"
  Android:ems="10"
  Android:inputType="textPersonName"
  Android:hint="User Name" />
0
Tona Dinh

ここでは、少しのコードを使用して、役に立つかどうかのヒントを非表示および表示しています。

txt_username.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if(txt_username.getText().toString().isEmpty()){
                    if(hasFocus){
                        txt_username.setHint("");
                    }else{
                        txt_username.setHint(R.string.username);
                    }
                }
            }
        });
0
user3116317
findViewById(R.id.mainLayout).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                hideKeyboard();
                editText.clearFocus();
                if (TextUtils.isEmpty(editText.getText().toString())) {
                    editText.setHint("your hint");
                }
            }
        });

        editText.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                editText.setHint("");
                return false;
            }
        });


        editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus)
                    editText.setHint("");
                else
                    editText.setHint("your hint");
            }
        });
0
Nishesh Jain