web-dev-qa-db-ja.com

Android:ボタンをクリックしたときにEditTextを編集するためにキーボードを開く方法は?

私の場合は次のとおりです。フォーカスが無効になっているEditTextフィールドが1つあります。 EditTextフィールドの横に、入力メソッド用の2つのボタンがあります。だから私は最初のボタンをクリックしたときに欲しい:ソフトキーボードを開き、EditTextフィールドのテキストを編集する。私は多くの方法を試します:

_InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
_

そして私にはうまくいきません。ソフトキーボードを開く唯一の方法は次のとおりです。

toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)

ただし、EditTextフィールドから情報を編集する方法はありません。

ボタンをクリックしたときに、キーボードを開いてEditTextのテキストを編集する方法を教えてください。どうもありがとう!

編集:

したがって、EditTextはデフォルトでフォーカス可能ではありません。キーボードボタンをクリックすると、フォーカス可能になります。次に、ソフトキーボードを表示してテキストを入力し、EditTextに表示します。挿入する他の方法は、キーボードを必要としないA-B-Cボタンです。それはモールス信号入力のようなものになります-A-B-Cボタンを押し続けます:)私の場合に実装するために提案された例を試してみます。君たちありがとう :)

my case

6
Dodo

皆さんの助けに感謝します:)私はあなたが私にくれたすべての提案を使用し、他の多くのスクリプトを検索してテストし、最終的に私のコードは機能しています:)

これが私の最終的なコードです:

InputEditText = (EditText) findViewById(R.id.InputText);

public void InputData() {

        /* Keyboard Button Action */
        KeyboardButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                Log.v(TAG, "On Keyboard Button click event!");

                InputEditText.requestFocus();
                InputEditText.setFocusableInTouchMode(true);

                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(InputEditText, InputMethodManager.SHOW_FORCED);

            }

        });

}

それは誰かのために役立つかもしれません:)ありがとう!

17
Dodo

あなたが説明したデザインはお勧めできません。ユーザーがfocusableコンポーネントのテキストを変更できるかどうかを制御することではないEditText属性の目的に違反しています。

ユースケースでこれが必要と思われるために代替の入力方法を提供する場合(たとえば、編集可能なテキストフィールドで特定の記号セットのみを許可する場合)、ユーザーが許可されていない間は、テキスト編集を完全に無効にする必要があります。フィールドの値を変更します。

編集可能なフィールドを宣言します。

_<EditText
    Android:id="@+id/edit_text_2"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:ems="10" />
_

そのfocusable属性はデフォルト値のままであることに注意してください。大丈夫です。後で処理します。編集プロセスを開始するボタンを宣言します。

_<Button
    Android:id="@+id/button_show_ime"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="Start editing" />
_

さて、あなたのActivityで宣言します:

_private EditText editText2;
private KeyListener originalKeyListener;
private Button buttonShowIme;
_

そしてonCreate()でこれを行います:

_@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ime_activity);

    // Find out our editable field.
    editText2 = (EditText)findViewById(R.id.edit_text_2);
    // Save its key listener which makes it editable.
    originalKeyListener = editText2.getKeyListener();
    // Set it to null - this will make the field non-editable
    editText2.setKeyListener(null);

    // Find the button which will start editing process.
    buttonShowIme = (Button)findViewById(R.id.button_show_ime);
    // Attach an on-click listener.
    buttonShowIme.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Restore key listener - this will make the field editable again.
            editText2.setKeyListener(originalKeyListener);
            // Focus the field.
            editText2.requestFocus();
            // Show soft keyboard for the user to enter the value.
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(editText2, InputMethodManager.SHOW_IMPLICIT);
        }
    });

    // We also want to disable editing when the user exits the field.
    // This will make the button the only non-programmatic way of editing it.
    editText2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // If it loses focus...
            if (!hasFocus) {
                // Hide soft keyboard.
                InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(editText2.getWindowToken(), 0);
                // Make it non-editable again.
                editText2.setKeyListener(null);
            }
        }
    });
}
_

すべてのコメントを含むコードが自明であることを願っています。 API8および17でテスト済み。

12
andr
LinearLayout ll_about_me =(LinearLayout) view.findViewById(R.id.ll_about_me);
    ll_about_me.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub

            mEtEmpAboutYou.requestFocus();
            mEtEmpAboutYou.setFocusableInTouchMode(true);

            InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(mEtEmpAboutYou, InputMethodManager.SHOW_FORCED);

            return true;
        }
    });
1
Monu Gupta

ボタンをクリックしたときにキーボードを開くためのこのコードを使用しています。お気に入り 。

btn1 = (Button) findViewById(R.id.btn1);
edt1 = (EditText) findViewById(R.id.edt1);
btn1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            edt1.requestFocus();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(edt1, InputMethodManager.SHOW_IMPLICIT);
        }
    });

その完成した仕事。

1
Hardik Parmar

fragmentsを使用する場合は、次のようにInputMethodManagerを使用できます。

InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            if (imm != null) {
                imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
            }

完全なコード:

btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                editText.setFocusable(true);
                editText.setFocusableInTouchMode(true);
                editText.requestFocus();
                InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {
                    imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
                }
            }
        });
0
Mahmoud Ayman

この助けを願っています

EditText txt_categorie = findViewById(R.id.txt_categorie);
txt_categorie.requestFocus();