记录spinner/popupwindow点击选项时页面自动滚到顶部的解决办法

页面是个有很多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()

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭