显示软键盘输入法

3

我正在尝试在触摸事件中显示一个视图的软输入键盘。 这一行是有效的:

inputManager.toggleSoftInputFromWindow(getWindowToken(),0,0);

但是这行代码不起作用:
inputManager.showSoftInput(this,0);

为什么会这样?如果我想将软输入法连接到视图上怎么办? 谢谢。

你是在模拟器上还是在真实设备上测试?我认为它不会在 AVD 上打开键盘,但它会在没有“硬键盘”的设备上打开。 - Mohsin Naeem
确实是在模拟器上。因此软输入法无法打开的原因是模拟器有硬键盘? - user940016
我想应该可以试试在没有物理键盘的设备上。 - Mohsin Naeem
有没有办法让模拟器认为没有硬键盘? - user940016
1
我认为... 点击 AVD 管理器 > 打开你的目标 AVD > 编辑 > 硬件 > 新建 > 键盘支持 > 确定 > 将其设置为“否”。 - Mohsin Naeem
显示剩余2条评论
5个回答

5

我想你是在模拟器上测试,而不是在真实设备上测试?

在 AVD 上它不会打开键盘,但是在真实设备上它会打开键盘,因为真实设备没有硬件键盘。

要在 AVD 上测试它,您需要禁用键盘。

禁用键盘,请使用以下命令:

Click on AVD manager > open you targeted AVD > Edit > Hardware > New > Keyboard Support > OK > Make it "NO"

3

尝试这个:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

只需实现onClickListener onView。然后在onClick中执行此操作。 - Zaz Gmy
正如我在原始信息中所说的,我知道toggleSoftInput可以工作,但我想使用showSoftInput,因为它接受一个View参数。 - user940016

2

showSoftInput() 方法只有在你的 View 获得焦点后才能生效。此外,调用 requestFocus() 方法也不会让你的 View 获得焦点,除非你先将 setFocusableInTouchMode() 和/或 setFocusable() 设置为 true。


2

尝试在“onclick”事件中使用此代码。

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

我知道toggleSoftInput可以工作,但我想使用showSoftInput因为它接受一个View参数,我想将视图连接到键盘。 - user940016

0

您需要先请求焦点并按以下方式显示软输入:

    mEditTextStudy.requestFocus();
    mEditTextStudy.post(
            new Runnable() {
                @Override
                public void run() {
                    InputMethodManager imm =
                            (InputMethodManager)
                                    getActivity()
                                            .getSystemService(Context.INPUT_METHOD_SERVICE);
                    if (imm != null) {
                        imm.showSoftInput(mEditTextStudy, SHOW_FORCED);
                    }
                }
            });

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