2011-09-02 81 views
18

感谢您的阅读。软键盘只出现在EditText焦点上

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

但是,当我按下后退按钮以关闭键盘并点击EditText我不会让键盘再次弹出。唯一的出路是再次开始Activity

这里是我的代码如下所示:


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> 

任何帮助将不胜感激!

谢谢!

回答

57

尝试打开和隐藏Runnable为内,

TO OPEN

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

TO CLOSE

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

这工作!我刚刚使用打开键盘代码虽然,我只是打回来键隐藏键盘。谢谢!:) –

+1

唯一的解决方案工作:) – Bora

+0

适用于SDK 17 /最小8 /目标17! –

6

您使用错误的视图来显示输入窗口。

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

感谢您指出,我只是纠正它。在构思问题时,这是一个错字。但原始代码有正确的看法。 –

4

试试这个:

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

您的意思是imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,1);对?如果是的话,那没有工作:(谢谢你的时间 –

+0

@SagarHatekar你可能已经添加了一些东西到你的清单,我已经尝试了很多次,它工作正常 –

0

在您活动这个编码,它会隐藏键盘this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

相关问题