Android Edittext onFocusChangeListener在不需要时调用
我目前正试图为我的应用程序提供一个直观的界面 我有一个oncreate功能,可以在加载时激活键盘,效果很好Android Edittext onFocusChangeListener在不需要时调用,android,Android,我目前正试图为我的应用程序提供一个直观的界面 我有一个oncreate功能,可以在加载时激活键盘,效果很好 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.add_popup); reminder = (CheckBox)findViewById(R.id.reminder_option); a
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和一个DatePickerFragment,它们都实现了onDate/TimesetListener
现在的问题是,当从弹出窗口设置时间或日期时,键盘会重新激活
我试图从中找到解决方案
当布局设置为focusable以从edittext中移除焦点时,我在if checked语句中添加了以下代码。
RelativeLayout布局=(RelativeLayout)findViewById(R.id.add_容器);
layout.requestFocus()
但是,在设置日期或时间后,在相应的对话框中,尽管焦点已从edittext元素移开,键盘仍处于激活状态
退出DatePickerDialog或TimePickerDialog时,如何防止键盘被激活?关注EditText是个棘手的问题。据我所知,没有真正的方法可以阻止编辑文本自动获得焦点。你请求关注相对人的方法似乎是解决这个问题的最佳方法——即使这不是一个好的解决方案,但感觉更像是一个解决办法
我的建议是:如果可能的话,尽量避免这种情况,试着完成你需要做的事情,例如使用ClickListeners,因为在这些情况下,你不必自动处理视图。但是,如果没有其他解决方案,您必须意识到,每当不应该接收焦点的视图可以获得焦点时,您必须请求将焦点放在相对位置上。您的代码没有显示如何处理对话框,因此我无法直接帮助您,但在这里您可以找到有关对话框的所有信息:谢谢您的回复,您的建议帮助我找到了解决方案,我意识到我基本上只需要键盘在第一次创建时出现,然后就再也不需要了。因此我使用了:imm=(InputMethodManager)getSystemService(Context.INPUT\u METHOD\u SERVICE);在oncreate方法中,删除了焦点侦听器