Android - 防止对话框关闭关闭软键盘

时间:2012-08-27 23:19:23

标签: android android-input-method android-windowmanager

我试图在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仍然保持焦点。

所以我的问题是,如何阻止对话框关闭软输入窗口? :-)任何建议都非常感谢。谢谢!

0 个答案:

没有答案