Как я могу настроить фокус (и отображать клавиатуру) на моем EditText программно

У меня есть макет, который содержит некоторые виды:

<LinearLayout> <TextView...> <TextView...> <ImageView ...> <EditText...> <Button...> </linearLayout> 

Как я могу настроить фокус (отображать клавиатуру) на моем EditText программно?

Я пробовал это, и он работает только тогда, когда я запускаю свою Activity нормально, но когда я запускаю ее в TabHost , она не работает.

 txtSearch.setFocusableInTouchMode(true); txtSearch.setFocusable(true); txtSearch.requestFocus(); 

Solutions Collecting From Web of "Как я могу настроить фокус (и отображать клавиатуру) на моем EditText программно"

Попробуй это:

 EditText editText = (EditText) findViewById(R.id.myTextViewId); editText.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 

http://developer.android.com/reference/android/view/View.html#requestFocus ()

использовать:

 editText.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 

showSoftInput не работал для меня вообще.

Я решил, что мне нужно установить режим ввода: android:windowSoftInputMode="stateVisible" (здесь в компоненте Activity в манифесте)

Надеюсь эта помощь!

Это сработало для меня, благодаря ungalcrys

Показать клавиатуру:

 editText = (EditText)findViewById(R.id.myTextViewId); editText.requestFocus(); InputMethodManager imm = (InputMethodManager)getSystemService(this.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY); 

Скрыть клавиатуру:

 InputMethodManager imm = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); 
 final EditText tb = new EditText(this); tb.requestFocus(); tb.postDelayed(new Runnable() { @Override public void run() { InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.showSoftInput(tb, InputMethodManager.SHOW_IMPLICIT); } }, 1000); 

Вот класс KeyboardHelper для скрытия и отображения клавиатуры

 import android.content.Context; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; /** * Created by khanhamza on 06-Mar-17. */ public class KeyboardHelper { public static void hideSoftKeyboard(Context context, View view) { if (context == null) { return; } InputMethodManager imm = (InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } public static void hideSoftKeyboard(Context context, EditText editText) { InputMethodManager imm = (InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); } public static void openSoftKeyboard(Context context, EditText editText) { InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); } } 

Я не мог получить ни один из этих ответов, чтобы работать самостоятельно. Решение для меня состояло в том, чтобы объединить их:

 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); editText.requestFocus(); imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); 

Я не уверен, почему это было необходимо для меня – согласно документам кажется, что любой из методов должен был работать сам по себе.

Вот как можно расширить расширение kotlin для отображения и скрытия мягкой клавиатуры:

 fun View.showKeyboard() { this.requestFocus() val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT) } fun View.hideKeyboard() { val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.hideSoftInputFromWindow(windowToken, 0) } 

Тогда вы можете просто сделать это:

 editText.showKeyboard() // OR editText.hideKeyboard()