如何在 Fragment 启动时将焦点设置到 editText?

8

MyFragment出现在屏幕上时,我希望能够自动将光标聚焦到MyFragment中的EditText上。我尝试过EditText.requestFocus(),但它并没有聚焦到EditText上。我该怎么办?


使用EditText edittext = view.findViewById(R.id.your_id); 然后如果(!edittext.getfocus()) edittext.requestFocus()/ edittext.setFocus(true); - Ranjeet Chouhan
4个回答

13

如果您的View可以获得焦点,editText.requestFocus()将把焦点放在它上面。但我猜想您希望在其获得焦点时显示软键盘。如果我的猜测正确,则以下代码可能适用于您。

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

这段代码来自于此帖子。 您还可以查看Android开发者文档了解详情。


无论是requestFocus()还是setFocusable()都对我没有任何作用。 - Kalpana Aneyrao

5

请在您的XML文件中设置此项

android:focusable="true"
android:focusableInTouchMode="true"

你可以在onViewCreated程序中设置这个:editText.isFocusableInTouchMode(); editText.setFocusable(true);


1
将这些行添加到类中,
EditText.isFocusableInTouchMode();
EditText.setFocusable(true); 
EditText.requestFocus(); 

或者在布局中添加这些属性,
android:focusable="true"
android:focusableInTouchMode="true"

0
加入这个 Kotlin 扩展函数。
fun EditText.focus() {
    text?.let { setSelection(it.length) }
    postDelayed({
        requestFocus()
        val imm = context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
    }, 200)
}

并在 onViewCreated 中调用它,应用于你的 EditText。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接