首页 > 代码库 > 点击列表后弹出输入框,所点击项自动滚动到输入框上方(类似微信朋友圈的评论)
点击列表后弹出输入框,所点击项自动滚动到输入框上方(类似微信朋友圈的评论)
参考:http://www.2cto.com/weixin/201508/433858.html
难点1:键盘高度(adjustResize+OnGlobalLayoutListener)
<activity android:name=".activity.MyActivity" android:windowSoftInputMode="adjustResize|stateHidden" android:screenOrientation="portrait" /> <activity
public class SoftKeyboardUtil { public static void observeSoftKeyboard(Activity activity, View rootView,final OnSoftKeyboardChangeListener listener) { if(rootView==null){ rootView = activity.getWindow().getDecorView(); } final View decorView = rootView; final ViewTreeObserver.OnGlobalLayoutListener globalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { int previousKeyboardHeight = -1; @TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override public void onGlobalLayout() { Rect rect = new Rect(); decorView.getWindowVisibleDisplayFrame(rect); int displayHeight = rect.bottom - rect.top; int height = decorView.getHeight(); int keyboardHeight = height - displayHeight; if (previousKeyboardHeight != keyboardHeight) { boolean hide = (double) displayHeight / height > 0.8; listener.onSoftKeyBoardChange(keyboardHeight, !hide); } previousKeyboardHeight = height; } }; decorView.getViewTreeObserver().addOnGlobalLayoutListener(globalLayoutListener); } public interface OnSoftKeyboardChangeListener { void onSoftKeyBoardChange(int softKeybardHeight, boolean visible); } }
遇到的问题:可能调用多次,多次触发布局,采用handle-message方式去传递
难点2:求距离
1.滚动距离=所点击的项底部的Y坐标 - 软键盘弹出后输入框顶部的Y坐标
由于多次触发布局重绘制 很难取到最终位置(软键盘弹出后输入框顶部的Y坐标 )
2.直接滚到指定位置 涉及到两个函数:
smoothScrollToPositionFromTop 平滑滚动 ,会跟键盘弹出时list重新布局一起滚动,滚的乱七八糟。
最终确定用:setSelectionFromTop 直接滚到指定位置,效果很好
listView.setSelectionFromTop(mItemPos,desc);
其他:
微信聊天界面把listview顶上去:
android:transcriptMode="normal"(必须)
http://blog.csdn.net/xingcome/article/details/51424724
<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #9e4a2f; background-color: #2b2b2b } span.s1 { text-decoration: underline }</style>
点击列表后弹出输入框,所点击项自动滚动到输入框上方(类似微信朋友圈的评论)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。