华为手机7.0以上华为7.0上popwindow位置显示错乱,飘

本文介绍了一个在Android 7.0系统中遇到的问题:PopWindows显示位置偏移,并提供了解决方案。通过检测系统版本并采用特定的方法调整PopWindows的位置,确保其在不同设备上正确显示。

由于测试手机上华为meta8,升级了7.0以后突然popwindows显示位置往上飘了, 其他机型没啥问题,一直没找到原因?后来看到一个连接?

https://code.google.com/p/android/issues/detail?id=221001

原来是 in showAtLocation failed to no gravity 在7.0上没有工作

解决方法是:

   if (android.os.Build.VERSION.SDK_INT >=24) {
                                int[] a = new int[2];
                                v.getLocationInWindow(a);
                                mPopupWindow.showAtLocation(((Activity) context).getWindow().getDecorView(), Gravity.NO_GRAVITY, 0 , a[1]+v.getHeight());
                            } else{
                                mPopupWindow.showAsDropDown(v);
                            }
package com.dubu.rtc.measure; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.PopupWindow; public class KeyBoardHeightHelperOld { private static final String TAG = "KeyBoardHeightHelperOld"; private PopupWindow popwindow; private int start; private static int keyBoardHeight; public void showMeasureWindow(View view, OnMeasureCompleteListener onMeasureCompleteListener) { Log.i(TAG, "showMeasureWindow"); view.post(new Runnable() { @Override public void run() { popwindow = new PopupWindow(); FrameLayout contentView = new MeasureLayout(view.getContext(), new MeasureLayout.onHeightChangedListener() { @Override public void onHeightChanged(int height) { if (start == 0) { start = height; } else if (height < start) { keyBoardHeight = start - height; if (onMeasureCompleteListener != null) { onMeasureCompleteListener.onKeyBoardShow(keyBoardHeight); } } else { if (onMeasureCompleteListener != null) { onMeasureCompleteListener.onKeyBoardHide(); } } } }); popwindow.setContentView(contentView); popwindow.setWidth(100); popwindow.setHeight(WindowManager.LayoutParams.MATCH_PARENT); popwindow.setBackgroundDrawable(new ColorDrawable(Color.RED)); popwindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); popwindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); popwindow.showAtLocation(view.getRootView(), Gravity.NO_GRAVITY, 0, 0); } }); } public void onDetached() { if (popwindow != null) { popwindow.dismiss(); } } public static int getKeyBoardHeight() { return keyBoardHeight; } public interface OnMeasureCompleteListener { void onKeyBoardShow(int keyBoardHeight); void onKeyBoardHide(); } } 这个帮助类中 有些手机键盘弹出键盘的时候 没有获取到键盘高度 怎么解决?
最新发布
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值