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

    xiaoxiao2021-03-26  9

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

    转载请注明原文地址: https://ju.6miu.com/read-450314.html

    最新回复(0)