2013-07-06 45 views
1

我目前正试图为我的应用程序提供一个直观的界面。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(); 

当单击该复选框,键盘是我使用2的内部类,一TimePickerFragment两者实现onDate/TimesetListener一个DatePickerFragment驳回

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); 

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

我试图从Stop EditText from gaining focus at Activity startup

在布局设置可聚焦从EditText上移除焦点的解决方案,我下面的代码添加到如果选中声明。 RelativeLayout layout =(RelativeLayout)findViewById(R.id.add_container); layout.requestFocus();

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

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

回答

2

专注于EditText's是棘手的。据我所知,没有办法阻止EditText自动获得焦点。您将请求重点转移到RelativeLayout的方法似乎是解决此问题的最佳解决方案 - 即使这不是一个好的解决方案,感觉更像是一种解决方法。

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

+0

感谢您的回复,您的建议帮助我找到了解决方案,我意识到我基本上只是需要键盘出现在第一次创建,然后再也不会。 因此我使用了: imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 在oncreate方法中,并删除了焦点侦听器 –

相关问题