フォーカスを取得したときにEditText内のすべてのテキストを選択します


230

EditTextにダミーテキストが含まれています。ユーザーがクリックしたときに選択して、ユーザーが入力を開始するとダミーテキストが削除されるようにします。

どうすればこれを達成できますか?

回答:


517

あなたはあなたのmain.xmlファイルで試すことができます:

android:selectAllOnFocus="true"

または、Javaでは、

editText.setSelectAllOnFocus(true);

17
EditText xmlに、UIビルダーによって挿入された</ requestFocus>タグがある場合、これが機能しないことを学びました。
machtnix 2013

:別のコンポーネントにフォーカスを追加@machtnix stackoverflow.com/a/1662088/1020871

160
editText.setSelectAllOnFocus(true);

これは、プログラムで実行する場合に機能します。


2
私にとっても..上記の解決策はどういうわけかうまくいかなかった..プログラム的にはうまくいった
マーティン・クリスト

3
上記の受け入れられた回答でまだ問題がある場合は、代わりにこれを試してください。動作していることが確認されています(についてもテストされていますFragments)。
MrHadiSatrio 2015

いくつかの奇妙な理由により、xmlの方法は適切に機能せず、これは機能します。SDK内のバグのようです。
ar-g

プログラムでフォーカスしている場合(ビューが既にフォーカスされている場合に目的のアクションが発生することを確認するための事前のeditText.requestFocus()問題editText.clearFocus()
Bad Loser

33
EditText dummy = ... 

// android.view.View.OnFocusChangeListener
dummy.setOnFocusChangeListener(new OnFocusChangeListener(){
    public void onFocusChange(View v, boolean hasFocus){
        if (hasFocus) && (isDummyText())
            ((EditText)v).selectAll();
    }
});

あなたの助けに感謝しますが、私は12のEditTextを持っているので、私はTheCottonSilkのソリューションを好んでいます。
Galip

@TheCottonSilkのソリューションはデザイン時のウィジェットに最適で、Craftosの回答は動的なeditTextに最適です。
Bishnu Paudel

2
@Galip OnFocusChangeListener listener = new OnFocusChangeListener...など...その後editText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener)のように...
SPARK

25

私はあなたが解決策を見つけたのを知っていますが、あなたが求めていることを行う実際の適切な方法android:hintは、EditTextで属性を使用することです。このテキストは、ボックスが空でフォーカスされていないときに表示されますが、EditTextボックスを選択すると消えます。


4
私のアプリでは、これらのフィールドは保存できる個人の詳細で埋められています。これらの詳細をロードすると、「ダミー」テキストが置き換えられます。現在の方法では、ユーザーが詳細を入力した後でテキストを選択することもできます。あなたの懸念をありがとう!
Galip

12

プログラムのフォーカスと選択を呼び出すことで管理

{
editabletext.requestFocus();
editabletext.selectAll();
}

11

android:hint = "hint"を試して、ユーザーにヒントを提供してみませんか。

「ヒント」は、ユーザーがedittextboxをクリックすると自動的に消えます。その適切かつ最良のソリューション。


4
いい答えだ。ただし、設定などから読み取った値をEditTextに入力して、これらの値をできるだけ簡単に変更できるようにする必要がある場合もあります。)
nuala

5

OnClickメソッドをeditTextに追加することもできます。

_editText.setSelectAllOnFocus(true);

そしてその中で:

_editText.clearFocus();
_editText.requestFocus();

editTextをクリックするとすぐに、テキスト全体が選択されます。


4

SelectAllOnFocusはEditTextが最初にフォーカスを取得したときに機能しますが、ユーザーがクリックするたびにテキストを選択したい場合はeditText.clearFocus()、その間を呼び出す必要があります。

たとえば、アプリに1つのEditTextと1つのボタンがある場合、EditTextを変更した後にボタンをクリックすると、フォーカスがEditTextに残ります。次に、ユーザーは新しい値を入力する前に、カーソルハンドルとバックスペースキーを使用してEditTextの内容を削除する必要があります。したがってeditText.clearFocus()、ButtonのonClickメソッドを呼び出します。


2

上記の答えを試しましたが、ステートメントを切り替えるまで機能しませんでした。これは私のために働いたものです:

    myEditText.setSelectAllOnFocus(true);
    myEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onClickMyEditText();
        }
    });

   private void onClickMyEditText() {
       if(myEditText.isFocused()){
        myEditText.clearFocus();
        myEditText.requestFocus();
       }else{
           myEditText.requestFocus();
           myEditText.clearFocus();
       }
   }

フォーカスがEditTextにあるかどうかを尋ね、そうでない場合は最初にフォーカスを要求してからクリアする必要がありました。そうしないと、次にEditTextをクリックしたときに仮想キーボードが表示されません。



0

これは私にとってはうまくいきます:

myEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(myEditText.isFocused()){
                myEditText.requestFocus();
                myEditText.clearFocus();
                myEditText.setSelection(myEditText.getText().length(), 0);
            }else{
                myEditText.requestFocus();
                myEditText.clearFocus();
            }

        }
    });
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.