如何以编程方式在我的EditText上设置焦点(并显示键盘)

我有一个布局,其中包含这样的一些意见:

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

我怎样才能以编程方式在我的EditText上设置焦点(显示键盘)?

我试过这个,它只有当我正常启动我的Activity ,但是当我在一个TabHost启动它,它不起作用。

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

尝试这个:

 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根本不适合我。

我想我需要设置input模式: android:windowSoftInputMode="stateVisible" (这里在清单中的活动组件)

希望这个帮助!

这对我工作,感谢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); 

下面是如何显示和隐藏软键盘的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() 

这里是用于隐藏和显示键盘的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); } } 

我无法得到任何这些答案自己的工作。 对我来说,解决scheme是将它们结合起来:

 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); 

我不知道为什么这是我所需要的 – 根据文件,似乎任何一种方法本身都应该工作。