Фокус по умолчанию и клавиатура для редактирования текста в Android AlertDialog - PullRequest
13 голосов
/ 22 марта 2012

Я использую AlertDialog.Builder в Android, чтобы быстро запросить у пользователя текст. Диалог появляется и отлично работает, но пользователь должен нажать на поле EditText, чтобы загрузить программную клавиатуру. Есть ли способ, чтобы открыть клавиатуру и сосредоточиться на всякий раз, когда мой диалог открывается? Вот мой код:

final Map<String,Object> rowData = itemList.get(mPosition);
                    final EditText input = new EditText(searchList.getContext());
                input.requestFocus();


                input.setSingleLine();
                final AlertDialog dialog = new AlertDialog.Builder(searchList.getContext())
                .setTitle(StringUtils.getSafeString(rowData.get("label")))
                .setView(input)
                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) { 
                        rowData.put("value", StringUtils.getSafeString(input.getText()));
                        searchList.invalidateViews();

                    }
                }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        // Do nothing.
                    }
                }).create();
                dialog.show();

Ответы [ 5 ]

25 голосов
/ 24 октября 2012

Используйте следующий код. У меня это сработало.

    editText.setOnFocusChangeListener(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            editText.post(new Runnable() {
                @Override
                public void run() {
                    InputMethodManager inputMethodManager= (InputMethodManager) YourActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputMethodManager.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
                }
            });
        }
    });
    editText.requestFocus();
8 голосов
/ 17 апреля 2014

Скрытая клавиатура при программной настройке фокуса на тексте редактирования в диалоге Android.

У меня тоже была эта проблема, и это было довольно простое решение - вот мое предлагаемое решение. Хотя он работал на DialogFragments для меня, я не вижу причин, почему он не будет работать в вашем случае.

В основном программная клавиатура не запускается, потому что представление создается программно. Фактическое исправление просто помещало эту строку в метод onCreateDialog:

dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);

Из документации Android по DialogFragments :

Если пользователь фокусируется на EditText, программная клавиатура автоматически появляются. Чтобы заставить это случиться с нашими программный фокус, мы называем getDialog (). GetWindow (). setSoftInputMode (). Обратите внимание, что многие окна операции, которые вы могли выполнить ранее в диалоге, все еще могут быть сделано в DialogFragment, но вы должны вызвать getDialog (). getWindow () вместо просто getWindow ().

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    //setup your dialog builder and inflate the view you want here
    ...
    //Make sure your EditText has the focus when the dialog is displayed
    edit.requestFocus();
    //Create the dialog and save to a variable, so we can set the keyboard state
    Dialog dialog = builder.create();
    //now, set to show the keyboard automatically
    dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
    return dialog;
}
1 голос
/ 24 ноября 2016

используйте пользовательский вид, если он вам нужен чаще

public class RequestFocusEditText extends AppCompatEditText {
    private RequestFocusEditText self;

    public RequestFocusEditText(final Context context, AttributeSet attrs) {
        super(context, attrs);
        this.self = this;

        setOnFocusChangeListener(new OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                post(new Runnable() {
                    @Override
                    public void run() {
                    InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputMethodManager.showSoftInput(self, InputMethodManager.SHOW_IMPLICIT);
                }
            });
        }
    });
    requestFocus();
    }
}
0 голосов
/ 22 января 2014

InputMethodManager imm = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE);imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, 0);Для сокрытия клавиатуры используйте:

InputMethodManager imm = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow (view.getWindowToken (), 0);

или попробуйте код ниже, но вы должны установить requestFocus () или свой текст редактирования

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        }
    }
});
0 голосов
/ 22 марта 2012

в вашем макете XML

вызов

<requestFocus/>

внутри вашего стандартного EditText

<EditText 
android:blabla
....
<requestFocus/>
/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...