如何以编程方式在我的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);
我不知道为什么这是我所需要的 – 根据文件,似乎任何一种方法本身都应该工作。