web-dev-qa-db-ja.com

Android EditText:Enterの代わりに完了またはMultiLineの代わりにワードラップ

行の戻りを許可しない複数行のEditTextがあります。現在、[保存]をクリックするとすぐに返品をいくつかのスペースに置き換えています。画面上の入力ボタンを完了ボタンに置​​き換える方法はありますか? (1行のEditTextの場合と同様)

私はまだリターンを取り除く必要があることを知っています(\r\n|\r|\n)オンスクリーンキーボードがそれらを追加する唯一の方法ではないためです。

これが私の現在のXMLです

<EditText Android:layout_width="fill_parent" Android:layout_height="wrap_content"
          Android:minLines="3" Android:gravity="left|top"
          Android:inputType="textMultiLine|textAutoCorrect|textCapSentences"
          Android:imeOptions="actionDone" />
15
Bryan Field
_Android:inputType="textEmailAddress|textEmailSubject"
_

入力タイプをメールアドレスまたはメールの件名として設定する必要があります。どちらかがあなたにあなたの望む結果を与えるでしょう。 shouldAdvanceFocusOnEnter()は、新しい行を入力するか、フォーカスを次のフィールドに移動するかを決定するTextViewのプライベートメソッドです。

20
Veeresh

この記事を読むことをお勧めします

http://savagelook.com/blog/Android/android-quick-tip-edittext-with-done-button-that-c​​loses-the-keyboard

本当に良い例

XML:

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

カスタムアクションクラス:

class DoneOnEditorActionListener implements OnEditorActionListener {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
            return true;  
        }
        return false;
    }
}

アクティビティクラス:

public class SampleActivity extends Activity {    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sample_activity_layout); // sample_activity_layout contains our target EditText, target_edittext

        EditText targetEditText = (EditText)findViewById(R.id.target_edittext); 
        targetEditText.setOnEditorActionListener(new DoneOnEditorActionListener());

        // The rest of the onCreate() code
   }
}
26
Stefano

XMLで_Android:inputType="textMultiLine|..."_を使用している場合、または対応するJavaコード:

_editField.setInputType(
    InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
_

次に、表示する唯一のソリューション ✔︎ Done または ???? Search ボタンはここで答えに従うことです:

2.3でSoftInputアクションラベルが完了した複数行のEditText

したがって、EditTextを拡張し、onCreateInputConnection()をオーバーライドして、IME_ACTION_xxフラグを手動で設定する必要があります。このようなもの...

_@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    InputConnection connection = super.onCreateInputConnection(outAttrs);
    int imeActions = outAttrs.imeOptions&EditorInfo.IME_MASK_ACTION;
    if ((imeActions & EditorInfo.IME_ACTION_DONE) != 0) {
        // clear the existing action
        outAttrs.imeOptions ^= imeActions;
        // set the DONE action
        outAttrs.imeOptions |= EditorInfo.IME_ACTION_DONE;
    }
    if ((outAttrs.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) {
        outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;
    }
    return connection;
}
_

これは、_"textMultiLine"_オプションを有効にするたびに、_Android:imeOptions="actionDone"_または_Android:imeActionLabel="actionDone"_の設定が無視されるためです。これは、非常に奇妙で混乱を招きます。

5
Mr-IDE

ActionLabelを使用した複数行のテキストに対してこれを行います。

editText.setSingleLine(true);
editText.setLines(10);
editText.setHorizontallyScrolling(false);
editText.setImeActionLabel(getString(R.string.ready), 0);
4
Damian