我目前正在尝试为我的应用程序提供直观的界面。
我有一个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 from gaining focus at Activity startup
的解决方案如果将布局设置为可聚焦以从edittext中删除焦点,我将以下代码添加到if checked语句中。 RelativeLayout layout =(RelativeLayout)findViewById(R.id.add_container); layout.requestFocus();
但是,在设置日期或时间之后,在相应的对话框中,尽管焦点从edittext元素移开,键盘仍然处于激活状态。
如何在退出DatePickerDialog或TimePickerDialog时阻止键盘被激活?
答案 0 :(得分:2)
专注于EditText很棘手。据我所知,没有真正的方法来阻止EditText自动获得焦点。您要求专注于RelativeLayout的方法似乎是解决此问题的最佳方案 - 即使它不是一个好的解决方案,感觉更像是一种解决方法。
我的建议是:如果可能的话尽量避免这种情况,尝试用ClickListeners来完成你需要做的事情,就像这些你不必自动处理视图一样。但是,如果没有其他解决方案,您必须意识到每次不应该收到焦点的视图都可以获得焦点时,您必须请求关注RelativeLayout。您的代码没有显示您如何处理对话框,所以我无法直接帮助您,但在这里您将找到有关对话框的所有信息:http://developer.android.com/guide/topics/ui/dialogs.html