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


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

  • 相关阅读:
    dev c++ 使用
    PAT A1012 The Best Rank (25分) [排序]
    算法笔记-排序算法
    PAT A1081 Rational Sum (20) [分数的四则运算]
    PAT A1015 Reversible Primes (20分) [素数 质数 进制转换]
    PAT A1078 Hashing (25) [⼆次⽅探查法 素数 质数]
    PAT A1058 A+B in Hogwarts (20)[进制转换]
    PAT 1027 Colors in Mars (20分)
    将博客搬至CSDN
    windows环境下面配置pip环境变量
  • 原文地址:https://www.cnblogs.com/wjw334/p/6634904.html
Copyright © 2020-2023  润新知