我试图在EditText获得焦点时强制显示软键盘,无论用户是否点击了EditText视图。奇怪的是,如果导致EditText获得焦点的动作来自Dialog onClick动作,键盘将永远不会显示。
这是一个简单的例子: main.xml源码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:clickable="true"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, MyActivity"
/>
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Show Dialog"
android:onClick="showDialog"/>
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Set Input Focus"
android:onClick="setInputFocus"/>
<EditText android:id="@+id/myEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
活动:
public class MyActivity extends Activity {
EditText myEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myEditText = (EditText)findViewById(R.id.myEditText);
myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(myEditText,InputMethodManager.SHOW_IMPLICIT);
} else {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
}
}
});
}
public void showDialog(View v){
new AlertDialog.Builder(this).setItems(new CharSequence[]{"Set Input Focus"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
myEditText.requestFocus();
}
}).create().show();
}
public void setInputFocus(View v){
myEditText.requestFocus();
}
}
点击&#34;设置输入焦点&#34;按钮,视图编辑文本将获得焦点,键盘将显示。但是,如果您要单击&#34;设置输入焦点&#34;对话框中的项目,键盘将短暂显示,然后立即消失(通常它根本不会显示)。看起来好像关闭对话框正在关闭我们在点击事件期间打开的键盘,但EditText仍然保持焦点。
所以我的问题是,如何阻止对话框关闭软输入窗口? :-)任何建议都非常感谢。谢谢!