点击列表后弹出输入框,所点击项自动滚动到输入框上方(类似微信朋友圈的评论)

Posted haxiaowei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了点击列表后弹出输入框,所点击项自动滚动到输入框上方(类似微信朋友圈的评论)相关的知识,希望对你有一定的参考价值。

参考: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

 

以上是关于点击列表后弹出输入框,所点击项自动滚动到输入框上方(类似微信朋友圈的评论)的主要内容,如果未能解决你的问题,请参考以下文章

js手机滑块模仿

android 中如何设置Spinner点击后弹出的下拉列表的宽度样式

js+css+html点击登录后弹出可拖拽的模态框

WIN7系统触摸屏一体机,点击输入框自动弹出虚拟键盘!

★在asp中,点击按钮后弹出对话框,怎么做?★

微信小程序输入框禁止自动弹出