Android虛擬鍵盤彈出界面向上平移

使用環境:

              普通的輸入框輸入數據時,界面上移已經滿足不了變態的項目經理……

使用方法:

1 清單文件常規聲明

android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustPan"

2 xml文件中部分屬性配置:

3  代碼獲取虛擬鍵盤彈出后各個佈局的具體數據,并進行比對獲取到一個合適的上移距離:

 int srollHeight, recordVisibleRec;
    private void controlKeyboardLayout(final View root, final View scrollToView) {
        root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                //獲取當前界面的高度    虛擬鍵盤的頂點位置也就是當前界面的底部高度
                Rect rect = new Rect();
                root.getWindowVisibleDisplayFrame(rect);
                int rootInvisibleHeight = root.getRootView().getHeight() - rect.bottom;
                if (Math.abs(rootInvisibleHeight - recordVisibleRec) > 200) {
                    if (rootInvisibleHeight > 200) {
                        int[] location = new int[2];
                        scrollToView.getLocationInWindow(location);
                        srollHeight = (location[1] + scrollToView.getHeight()) - rect.bottom;
                        srollHeight = 0 - (srollHeight /4);
                        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(scrollToView, "translationY", 0f, srollHeight);
                        objectAnimator.setDuration(500);
                        objectAnimator.start();
                    } else {
                        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(scrollToView, "translationY", srollHeight, 0f);
                        objectAnimator.setDuration(500);
                        objectAnimator.start();
                    }
                }
                recordVisibleRec = rootInvisibleHeight;
            }
        });
    }

調用方法:

 

碼雲傳送:https://gitee.com/longlyblack_admin/MVVM_Databinding

具體更好的優化方案在摸索中,目前也是初步探索……

更多交流,歡迎來訪:88627109

愿自己永無BUG!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值