UpdatePlugin icon indicating copy to clipboard operation
UpdatePlugin copied to clipboard

弹出的更新对话框布局不正确,看图

Open bingdiao opened this issue 5 years ago • 0 comments

原因是我的工程代码里调用了方法来调整了系统的屏幕密度值,导致您这儿弹出的更新对话框布局不正确,看效果图如下:我希望您能帮忙告知我如何适配您的布局? Screenshot_2020-04-24-17-28-19-944_org wuji 方法代码是: /** 改变系统的屏幕密度值,建议在BaseActivity.onCreate()和BaseActivity.onStart()中均执行。 这个方法的用途比如: 1、在逍遥模拟器中的屏幕宽高像素值和dpi值对应不上,如1080x1920的手机,dpi一般应该为480,而其实际为288偏小,从而造成了所有应用(不止是我们的app)看上去控件偏小,所以就需要调整下系统的屏幕密度值以使得界面控件正常大小显示。 2、在华为SCL-TL00型号手机上,其为5英寸分辨率是720x1280,density原值为2,但其值严格应该为1.8,从而造成了应用看上去控件偏大。 备注: 1、如果修改了设备的屏幕密度等值,影响范围仅在应用内,不影响其他应用; 2、在对话框弹出高度为WRAP_CONTENT时,部分设备的实际弹出框高度会不足从而造成显示不全! 3、Fresco图片加载框架中的SimpleDraweeView控件经测会受修改屏幕密度值的影响,从而使得其图片大小显示不正确。

 @param context 要改变密度值的页面
 */
public static void resetToTargetDensity(Context context) {
    LogX.d(context.getClass().getSimpleName() + "窗口原密度值:" + ScreenUtil.getDensityScale(context));
    Application application = BaseApplication.getInstance();
    DisplayMetrics displayMetrics = application.getResources().getDisplayMetrics();
    if (mDensityScale == 0) {
        mDensityScale = displayMetrics.density;
        mFontDensityScale = displayMetrics.scaledDensity;
        application.registerComponentCallbacks(new ComponentCallbacks() {
            @Override
            public void onConfigurationChanged(Configuration newConfig) {
                if (newConfig != null && newConfig.fontScale > 0) {
                    mFontDensityScale = application.getResources().getDisplayMetrics().scaledDensity;
                }
            }

            @Override
            public void onLowMemory() {
            }
        });
    }
    float targetDensityScale;
    if (ScreenUtil.isScreenOriatationPortrait(context)) {
        targetDensityScale = displayMetrics.heightPixels / 640f;//如1920/640=3.0,其中640是参考设备的高,单位是dp
    } else {
        targetDensityScale = displayMetrics.heightPixels / 420f;//横屏时调整密度值低一些,因为我不希望控件高度太高显得太占用空间。
    }
    float targetFontDensityScale = targetDensityScale * (mFontDensityScale / mDensityScale);
    int targetDensityDpi = (int) (targetDensityScale * 160);

    displayMetrics.density = targetDensityScale;
    displayMetrics.scaledDensity = targetFontDensityScale;
    displayMetrics.densityDpi = targetDensityDpi;

    //虽然以上已经改变了Application中的密度值,在大多页面会生效,但有一种情况比如平板模拟器中打开竖屏App,会发现以上修改的密度值无效,还需要单独设置Activity的密度值。
    final DisplayMetrics activityDisplayMetrics = context.getResources().getDisplayMetrics();
    activityDisplayMetrics.density = targetDensityScale;
    activityDisplayMetrics.scaledDensity = targetFontDensityScale;
    activityDisplayMetrics.densityDpi = targetDensityDpi;
    LogX.d(context.getClass().getSimpleName() + "窗口现密度值:" + ScreenUtil.getDensityScale(context));
}

bingdiao avatar Apr 24 '20 09:04 bingdiao