页面是个有很多EditText和Spinner的表单录入页面 由于跨页所以用ScrollView嵌套
当选择Spinner的下拉项时 Spinner下拉面板正常关闭同时页面滚动到顶部 很影响用户使用 这样肯定不行
开始以为当spinner在scrollview时 存在android版本兼容问题
于是改成了popupwindow 比spinner麻烦好多 页面有多个EditText用于弹出popupwindow展示不同的下拉数据 点击TextView要记录当前的EditText当点击popupwindow的列表项关闭popupwindow时要取到数据手动调用之前记录的EditText的setttext方法
而用spinner 这一切都是自动的
前面都是废话 结果用popupwindow实现完后还是一样 会自动滚动到顶部 这时才仔细分析问题原因
原来是在点击EditText(设置了clickable=true;focusable=false)弹出spinner/popupwindow时焦点在页面外的EditText上 ,于是关闭spinner/popupwindow时页面自动滚动到获取焦点的EditText
解决思路是 在focusable=false的EditText的点击事件里去掉焦点时不让其他的EditText自动获取焦点
最初的解决方案是这样的
if (getCurrentFocus()!=null) {
getCurrentFocus().clearFocus();
}
popupwindow试了没问题 但对spinner不起作用 于是搜clearFocus不起作用 最终解决方案是这样的
给表单布局容器设置
android:focusableInTouchMode="true"
spinner.setOnItemSelectedListener 在onItemSelectedListener的onItemSelected方法内让表单容器requestFocus()