不需要时调用Edittext onFocusChangeListener



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

我有一个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);

我使用了两个内部类,一个TimePickerFragment和一个DatePickerFraction,它们都实现了onDate/TimesetListener。

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

我尝试了Stop EditText的解决方案,以在活动启动时获得关注

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

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

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

关注EditText是很棘手的。据我所知,没有真正的方法可以阻止EditText自动获得焦点。你请求关注RelativeLayout的方法似乎是解决这个问题的最佳方法——即使这不是一个好的解决方案,感觉更像是一种变通方法。

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

相关内容

  • 没有找到相关文章

最新更新