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

DefaultErrorActivity.class是针对于三方库举例的类吧? #51

Closed
5 tasks done
zhq93 opened this issue Sep 14, 2018 · 6 comments
Closed
5 tasks done

DefaultErrorActivity.class是针对于三方库举例的类吧? #51

zhq93 opened this issue Sep 14, 2018 · 6 comments

Comments

@zhq93
Copy link

zhq93 commented Sep 14, 2018

Environment

  • Autosize Version:
  • Target Android Version:
  • Device Model:
  • Device Resolution:
  • Design Size On AndroidManifest:

Bug Description:

Log:



Screenshot

Related Code:

  

Others:

@zhq93
Copy link
Author

zhq93 commented Sep 14, 2018

抱歉多问一句,在创建实时预览布局虚拟设备时,为何计算对角线尺寸是除以72,而不是除以410左右呢?不是指手机的逻辑密度值嘛?
那对于750*1334 的设计稿尺寸,以pt副单位标注,创建虚拟设备值对角长度怎么算,除数是多少,没看懂你这边为何是72? 谢谢!@JessYanCoding

@JessYanCoding
Copy link
Owner

JessYanCoding commented Sep 14, 2018

实时预览创建方法

我的公式不是写的很清楚吗,只有用 dp 为单位的时候,公式 (sqrt(纵向分辨率^2+横向分辨率^2))/dpi,除数不是固定的,dpi 是根据你的实际设备算出来的

其他副单位的公式,除数都是固定不变的,诸如 pt 的公式 (sqrt(纵向分辨率^2+横向分辨率^2))/72,除数 72 是固定不变的

mm 的公式 (sqrt(纵向分辨率^2+横向分辨率^2))/25.4,除数 25.4 也是固定不变的

意味着你如果创建副单位的模拟器,就只用知道设备的纵向分辨率和横向分辨率即可,屏幕对角线,dpi 什么的都不用管

为什么这些副单位,除数不变,而 dp 的除数会变,这也不是我猜的,可能你没认真看我的文章,这个是系统定的

public static float applyDimension(int unit, float value,
                                       DisplayMetrics metrics)
    {
        switch (unit) {
        case COMPLEX_UNIT_PX:
            return value;
        case COMPLEX_UNIT_DIP:
            return value * metrics.density;
        case COMPLEX_UNIT_SP:
            return value * metrics.scaledDensity;
        case COMPLEX_UNIT_PT:
            return value * metrics.xdpi * (1.0f/72);
        case COMPLEX_UNIT_IN:
            return value * metrics.xdpi;
        case COMPLEX_UNIT_MM:
            return value * metrics.xdpi * (1.0f/25.4f);
        }
        return 0;
    }

这 4 个单位的模拟器创建公式都是经过我的严密测试了的,怎么测试的呢?

Preview 放大到 1000% 测的布局在所有单位的模拟器上误差不超过 0.5 px

@JessYanCoding
Copy link
Owner

JessYanCoding commented Sep 14, 2018

针对第一个问题,我注释都已经写的很清楚了,如果你用副单位的话,不必理会

@zhq93
Copy link
Author

zhq93 commented Sep 14, 2018

第一个问题,我明白,如果是副单位,直接就隔离了外部三方库,是不用理会;
第二个我知道了,是系统源码就这样计算的,抱歉;
最终谢谢你这么详细的解答,很感谢!

@JessYanCoding
Copy link
Owner

JessYanCoding commented Sep 14, 2018

这里还要补充一下,为了让副单位的布局都能达到最好的预览效果,所以通过公式算出的模拟器的屏幕尺寸都是非常大的(in 这个单位的意思是英寸,整个手机才几英寸?布局上写 1 in 就已经占很宽的屏幕了,你还一来就 1080 in,不通过放大模拟器的屏幕尺寸,是没法做到实时预览的,这是个小窍门),这会导致什么呢,就是如果你将控件的高宽设置成 wrap_content,预览效果有可能会变得非常小,比如你将一个 ImageView 的高宽都设置成 wrap_content,那这个图片在预览时会显得非常小,因为图片的实际大小没变,但模拟器的屏幕尺寸却非常大,所以预览效果会非常小,这是不能够解决的

但是不用担心,wrap_content 只是让 Preview 的预览效果非常小,运行到实际设备上,是不会有任何变化的,因为实际设备的屏幕尺寸是正常的

@ytsxg123
Copy link

我今天创建了一个pt的预览,image wrap_content出现了较大的问题,这个预览问题有没有好的解决方案或者编码规范可以去处理这个事情。

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

3 participants