Android 软键盘仅在编辑文本焦点上显示一次

Android 软键盘仅在编辑文本焦点上显示一次,android,keyboard,android-edittext,Android,Keyboard,Android Edittext,谢谢你的阅读 我面临一个奇怪的问题:我的应用程序行为是这样的:当活动开始时,我在EditText上显示requestFocus(),并显示软键盘 然而,当我按下后退按钮关闭键盘并点击编辑文本时,我再也不会让键盘弹出。唯一的出路是再次启动活动 我的代码是这样的: EditText editText = (EditText) findViewById(R.id.editText); editText.requestFocus(); InputMethodManager imm = (InputMe

谢谢你的阅读

我面临一个奇怪的问题:我的应用程序行为是这样的:当
活动开始时,我在
EditText
上显示
requestFocus()
,并显示软键盘

然而,当我按下后退按钮关闭键盘并点击编辑文本时,我再也不会让键盘弹出。唯一的出路是再次启动
活动

我的代码是这样的:


EditText editText = (EditText) findViewById(R.id.editText);
editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if(imm != null) {
            imm.toggleSoftInput(0, 0);
            imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);    
        }
下面是我的XML:


<EditText android:id="@+id/editText" 
        android:layout_width="wrap_content"
        android:imeOptions="actionSearch" android:hint="Test Hint"
        android:layout_height="wrap_content" android:layout_centerHorizontal="true" 
        android:maxLength="30"> 
</EditText>

任何帮助都将不胜感激


谢谢

显示输入窗口时使用了错误的视图

EditText editText = (EditText) findViewById(R.id.editText);
editText.requestFocus();
InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null) {
    imm.showSoftInput(editText, 0); 
}
试试这个:

final InputMethodManager imm = (InputMethodManager)EnterWordsActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm != null)
    {
        imm.toggleSoftInput(YOUE_EDTITE_TEXT.SHOW_FORCED,1);
    }

尝试打开并隐藏在
可运行的
as中

打开

                 ettext.requestFocus();
                 ettext.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        InputMethodManager keyboard = (InputMethodManager)
                        getSystemService(Context.INPUT_METHOD_SERVICE);
                        keyboard.showSoftInput(ettext, 0);
                    }
                },200);
关闭

                    ettext.requestFocus();
                    ettext.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        InputMethodManager keyboard = (InputMethodManager)
                        getSystemService(Context.INPUT_METHOD_SERVICE);
                        keyboard.hideSoftInputFromWindow(ettext.
                                                         getWindowToken(), 0);
                    }
                },200);

在活动中使用此编码,它将隐藏键盘
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT\u INPUT\u STATE\u ALWAYS\u HIDDEN)

在我清除forces
textField.clearFocus()之前,上述操作均无效在请求焦点之前,因此我在
onResume
中的最后一段代码如下所示

   @Override
    public void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");
        resumed = true;
        textField.postDelayed(new Runnable() {
            @Override
            public void run() {
                textField.clearFocus();
                textField.requestFocus();
                if (!editMode)
                    textField.getText().clear();
                inputMathodType = SharedPref.read(SharedPref.KEY_INPUT_MATHOD_SHARED_PREF, -1);
                setInputMethod();

            }
        }, 200);
    }

谢谢你指出,我刚刚改正了。这是一个排版问题。但原始代码的视图是正确的。您的意思是imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,1);正确的?如果是,则不起作用:(谢谢您的时间。@SagarHatekar您可能已经在清单中添加了一些内容。我已经尝试过很多次了。它工作正常。这很有效!我只是使用了打开的键盘代码。我只是按了后退键隐藏键盘。谢谢!:)在SDK 17/MIN 8/TARGET 17上工作!在我到达这一页之前,我已经做了同样的解决方案——但我只是想解释一下为什么我们的解决方案可以挽救我的一天。它正在工作。