Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
bingdiao opened this issue Apr 24, 2020 · 0 comments
Open

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

bingdiao opened this issue Apr 24, 2020 · 0 comments

Comments

@bingdiao
Copy link

原因是我的工程代码里调用了方法来调整了系统的屏幕密度值,导致您这儿弹出的更新对话框布局不正确,看效果图如下:我希望您能帮忙告知我如何适配您的布局?
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));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant