行の戻りを許可しない複数行の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" />
_Android:inputType="textEmailAddress|textEmailSubject"
_
入力タイプをメールアドレスまたはメールの件名として設定する必要があります。どちらかがあなたにあなたの望む結果を与えるでしょう。 shouldAdvanceFocusOnEnter()
は、新しい行を入力するか、フォーカスを次のフィールドに移動するかを決定するTextViewのプライベートメソッドです。
この記事を読むことをお勧めします
本当に良い例
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 } }
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"
_の設定が無視されるためです。これは、非常に奇妙で混乱を招きます。
ActionLabelを使用した複数行のテキストに対してこれを行います。
editText.setSingleLine(true);
editText.setLines(10);
editText.setHorizontallyScrolling(false);
editText.setImeActionLabel(getString(R.string.ready), 0);