我试图在 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();
}
}
单击“设置输入焦点”按钮时,视图编辑文本将获得焦点,并且键盘将显示。但是,如果您要单击对话框中的“设置输入焦点”项,键盘将短暂显示然后立即消失(通常根本不会显示)。似乎对话框关闭正在关闭我们在单击事件期间告知要打开的键盘,但 EditText 仍然保持焦点。
所以我的问题是,如何防止对话框关闭软输入窗口?:-) 非常感谢任何建议。谢谢!