首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么或何时InputMethodManager.showSoftInput返回false?

为什么或何时InputMethodManager.showSoftInput返回false?
EN

Stack Overflow用户
提问于 2016-01-27 04:03:37
回答 5查看 4.7K关注 0票数 8

我试图在屏幕上弹出一个软键盘,首先以编程方式加载(而不是在Manifest中更改windowSoftInputMode )。

有趣的是,在屏幕上第一次加载,它根本没有工作。这是代码块。

代码语言:javascript
复制
mEDT.requestFocus();
mEDT.requestFocusFromTouch();
mImm.showSoftInput(mEDT, InputMethodManager.SHOW_IMPLICIT);

showSoftInput是返回假的,这导致软键盘没有显示。

但是当我点击EditText的时候。showSoftInput返回true,并显示软键盘。

有人能向我解释一下发生了什么吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-03-25 22:02:58

你在用碎片吗?我发现showSoftInput()在片段上是不可靠的。

在检查了源代码之后,我发现在onCreate()/onCreateView()onResume()中调用onCreateView()并不会立即导致对象聚焦。这很可能是因为尚未创建内容视图。因此,焦点稍后会在活动或片段的初始化过程中发生。

我在onViewCreated()中调用onViewCreated()获得了更多的成功。

代码语言:javascript
复制
public class MyFragment extends Fragment {
    private InputMethodManager inputMethodManager;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_layout, container, false);

        EditText text1 = (EditText) view.findViewById(R.id.text1);
        text1.requestFocus();

        return view;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        InputMethodManager inputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        inputMethodManager.showSoftInput(view.findFocus(), InputMethodManager.SHOW_IMPLICIT);
        super.onViewCreated(view, savedInstanceState);
    }
}

即使你不使用片段,我打赌同样的规则也适用。因此,确保在调用showSoftInput()之前创建了视图。

票数 8
EN

Stack Overflow用户

发布于 2016-01-27 04:05:54

manifest.xml文件中,添加

代码语言:javascript
复制
<activity android:name=".YourActivity"
          android:windowSoftInputMode="stateAlwaysVisible" />

到您的活动名称,您希望在其启动上显示键盘。

票数 1
EN

Stack Overflow用户

发布于 2016-01-27 04:17:13

试试这个:

代码语言:javascript
复制
  <activity
  ...
  android:windowSoftInputMode="stateVisible" >
 </activity>

代码语言:javascript
复制
   getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35028676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档