Android EditViewの「完了」ボタンを作成し、クリックするとキーボードを非表示にする方法を教えてください。


115

ユーザーがをクリックするとEditView、Androidがキーボードを開き、ユーザーがに書き込みできるようにしEditViewます。

問題は、ユーザーが書き込みを完了したときに、キーボードを非表示にする方法がないことです。キーボードを非表示にするには、ユーザーは戻るボタンを押す必要があります。

Doneキーボードを非表示にするボタンをキーボードに表示する方法はありますか?


回答:



148

最初に、以下に示すように、ターゲットEditTextにandroid:imeOptions等しい属性を設定する必要がありactionDoneます。これにより、EditTextのソフトキーボードの[RETURN]ボタンが[DONE]ボタンに変わります。

<EditText 
    android:id="@+id/edittext_done"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Enter some text"
    android:imeOptions="actionDone"
    />

@Michaelはそのリンクを削除しました。ありがとう
Paresh Mayani 2013年

19
android:singleLine="true"これをxml経由で機能させるには、追加する必要がありました
Jacksonkr '28

4
android:singleLineは非推奨です。android:maxLines = "1"を使用します。
FariborZ 2017年

はい@FariborZ singleLineは非推奨になりました。
Paresh Mayani 2017年

1
重要な注意:singleLineはmaxLinesと同じではありません。この誤解は誰にとっても多くの問題を引き起こします。stackoverflow.com/questions/30879471/...
milosmns

86

との両方 imeOptions 含めるsingleLine

<EditText 
   android:id="@+id/edittext_done"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionDone"
   android:singleLine="true"
   />

35
android:imeActionLabel="Done" 
android:singleLine="true"

XMLファイルでは問題なく機能します。ただし、これにより、editTextは不要な1行で入力し続けることにもなります。したがって、コードに次のコードを追加すると、すべてを1行で入力してしまうことがなくなります。

mainText.setHorizontallyScrolling(false);
mainText.setMaxLines("Maximum integer value that you want to provide");

1
おかげで、デモは12で、時間は11:58で、11:59に私の問題を修正しました:p
shahzain ali

android:singleLine = "true"は非推奨になりました。したがって、android:lines = "1"
Gowthamを使用します。R

20

完了ボタンを取得するため

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

そして

android:inputType="text" XMLで

キーボードから行われたクリックの処理について

    editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
            if(actionId == EditorInfo.IME_ACTION_DONE){
                // Your action on done
                return true;
            }
            return false;
        }
    });

`


14

これを使って:

android:singleLine="true"

はい...そうでなければ、次の行に行くこととキーボードを閉じることをどのように区別しますか?
jstewart379 14年

これは私のために働いてしまったものです。actionDone一部のデバイスの反応が異なる場合に備えて、そこにいるとエラーになることにしました。
Jacksonkr 2016年

10

これらの2行を使用して EditText

android:imeActionLabel="Done"
android:singleLine="true"

または、この行によってプログラムでそれを達成できます。

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

7

ウィジェットのプロパティが変更されない場合はandroid:imeOptions="actionDone"、レイアウトxmlファイルと同じように使用 することをお勧めします。




5

ActionDoneは、キーボードの非表示時にキーボードの次のボタンをクリックしたときに使用されます。テキストの編集またはAppcompatEditで使用します。

XML

1.1 AppCompatEdittextを使用する場合

    <android.support.v7.widget.AppCompatEditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>

1.2 Edittextを使用する場合

    <EditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>

JAVA

EditText edittext= (EditText) findViewById(R.id.edittext);
edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);

5

多くの人が問題を知らずにそれに苦労することができるので、私はそれを指摘しなければなりません。

あなたはクリックする非表示にするキロバイトをしたい場合はDone、あなたが設定android:imeOptions="actionDone"android:maxLines="1" なしであなたのEditTextを設定するinputTypeには、意志はありませんデフォルトとしての仕事inputTypeのEditTextのためではありません"text"多くの人が考えるほど。

だから、設定のみ inputType、あなたが望む結果を与えるものは何でもあなたはそれが好きに設定しているか"text""number"などを、...。


2

実際、カスタムテキストをその小さな青いボタンに設定できます。xmlファイルで使用するだけ

android:imeActionLabel="whatever"

EditTextで。

またはJavaファイルで

etEditText.setImeActionLabel("whatever", EditorInfo.IME_ACTION_DONE);

この関数の2番目のパラメーターに入力する内容の例として、任意にIME_ACTION_DONEを選択します。これらのアクションの完全なリストはここにあります

これにより、すべてのデバイスのすべてのキーボードにテキストが表示されるわけではないことに注意してください。一部のキーボードは、そのボタンのテキストをサポートしていません(例:swiftkey)。また、一部のデバイスはそれをサポートしていません。良いルールは、ボタンに既にテキストが表示されている場合は、これでテキストを変更します。


2

Kotlinソリューション

Kotlinでキーボード非表示+完了アクションを処理する直接的な方法は次のとおりです。

// Set action
edittext.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        // Hide Keyboard
        val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
        inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
        true
    }
    false
}

Kotlin拡張

これを使用edittext.onDone {/*action*/}して、メインコードを呼び出します。読みやすく、保守しやすい

edittext.onDone { edittext.hideKeyboard() }

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

fun EditText.onDone(callback: () -> Unit) {
    // These lines optional if you don't want to set in Xml
    imeOptions = EditorInfo.IME_ACTION_DONE
    maxLines = 1
    setOnEditorActionListener { _, actionId, _ ->
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            callback.invoke()
            true
        }
        false
    }
}

追加のキーボード拡張

キーボードの操作を簡略化する他の方法が必要な場合(表示、閉じる、フォーカス):この投稿を読む

コードでない場合は、これらのオプションをedittext Xmlに追加することを忘れないでください。

<EditText ...
    android:imeOptions="actionDone"
    android:inputType="text"/>

inputType="textMultiLine"サポートが必要ですか?この記事を読んし、追加しないimeOptionsか、inputTypeXMLで



0

使用している場合

android:imeOptions="actionDone" 

その後、あなたは使用する必要があります

android:inputType="text"

その後、あなただけがキーボードのアクション完了ボタンを見ることができます。


0

ボタンがまったく必要ない場合(たとえば、タップが定位置ではなく、シングル/ダブル/ロングタップに依存している視覚障害者向けのGUIを開発している場合):

text.setItemOptions(EditorInfo.IME_ACTION_NONE)

またはコトリンで:

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