1

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

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

4

0 回答 0