1

我目前正在尝试为我的应用程序提供一个直观的界面。

我有一个 oncreate 函数来激活加载时工作正常的键盘。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_popup);
    reminder = (CheckBox)findViewById(R.id.reminder_option);
    addTask();
    taskField = (EditText)findViewById(R.id.task_name);
    taskField.setHorizontallyScrolling(true);
    taskField.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean focus) {
            if (focus) {
                getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            }
        }
    });
    taskField.requestFocus();

当复选框被点击时,键盘被关闭

if(checked){
                imm.hideSoftInputFromWindow(taskField.getWindowToken(), 2);
                dateTitle.setVisibility(View.VISIBLE);
                dateSelector.setVisibility(View.VISIBLE);
                timeTitle.setVisibility(View.VISIBLE);
                timeSelector.setVisibility(View.VISIBLE);
                datetimesperator.setVisibility(View.VISIBLE);

我正在使用 2 个内部类,一个 TimePickerFragment 和一个 DatePickerFragment 都实现了 onDate/TimesetListener。

现在的问题是,当从弹出窗口中设置时间或日期时,键盘会重新激活。

我尝试了Stop EditText 的解决方案,以在 Activity 启动时获得焦点

在布局设置为可聚焦以从编辑文本中移除焦点的地方,我将以下代码添加到 if checked 语句中。相对布局布局 = (RelativeLayout)findViewById(R.id.add_container); layout.requestFocus();

但是,在设置日期或时间后,在相应的对话框中,尽管焦点已从 edittext 元素移开,但键盘仍处于激活状态。

退出 DatePickerDialog 或 TimePickerDialog 时如何防止键盘被激活?

4

1 回答 1

2

专注于 EditText 是很棘手的。据我所知,没有真正的方法可以防止 EditText 自动获得焦点。您将焦点请求到 RelativeLayout 的方法似乎是解决此问题的最佳方法 - 即使它不是一个很好的解决方案,感觉更像是一种解决方法。

我的建议是:如果可能的话,尽量避免这种情况,试着完成你需要做的事情,例如使用 ClickListeners,因为有了这些你不必处理自动假设焦点的视图。但是,如果没有其他解决方案,您必须注意,每次不应该接收焦点的视图获得焦点时,您都​​必须请求对 RelativeLayout 的焦点。您的代码没有显示您如何处理对话框,因此我无法直接帮助您,但在这里您可以找到有关对话框所需的所有信息:http: //developer.android.com/guide/topics/ui/dialogs。 html

于 2013-07-06T10:27:56.803 回答