@Override
public LayoutParams generateLayoutParams(AttributeSet attrs) {
AutoSizeCompat.autoConvertDensityOfGlobal(getResources());//如果没有自定义需求用这个方法
AutoSizeCompat.autoConvertDensity(getResources(), 667, false);//如果有自定义需求就用这个方法
return super.generateLayoutParams(attrs);
布局和屏幕底部有间隔或超出屏幕?
如何将旧项目从 AndroidAutoLayout 迁移至 AndroidAutoSize
在旧项目迁移时,如何让 AndroidAutoSize 默认对旧页面不适配,只对新页面进行适配
如何控制 AndroidAutoSize 的初始化,让 AndroidAutoSize 在某些设备上不自动启动?
如何使用 jar 包的方式依赖 AndroidAutoSize?
对创建模拟设备和实时预览相关问题的解答
对于横屏、平板电脑、TV 的适配问题
当页面中有 WebView 时屏幕适配失效
Dialog 屏幕适配问题
Toast 屏幕适配问题
单 Activity 多 Fragment 的适配问题
运行后报 java.lang.NoClassDefFoundError 错误
如果想让 AndroidAutoSize 适配多个进程的页面,请在 App 初始化时调用 AutoSize#initCompatMultiProcess(Context) 或 AutoSize#checkAndInit(Application),像 这样(有些插件化框架可能会默认开启多进程)
使用沉浸式状态栏,状态栏和标题栏之间有小间隙
怎么适配 Android 分屏、画中画、缩放模式?
RecyclerView 的 item 布局错乱或局部适配失效
百度地图 Marker 适配问题
使用代码布局或者创建自定义控件时,在工具类 AutoSizeUtils 中,使用对应的方法,将其他单位转换为 px,作为控件尺寸,即可完成屏幕适配
如果不想让 App 内的字体大小跟随系统设置中字体大小的改变,请调用 AutoSizeConfig.getInstance().setExcludeFontScale(true); 即可
如果想适配 Bitmap,需要在创建 Bitmap 时指定修改后的 DisplayMetrics
Bitmap bitmap = Bitmap.createBitmap(activity.getResources().getDisplayMetrics(),width,height,config);
友库 AndroidUtilCode 的屏幕适配相关 Issues 汇总
友库 Rudeness 的 Issues 汇总
JessYanCoding, gaoqianZ, xujiangang, chentao7v, houjianbo188, Cr321, ywhtyj126, geeklx, ceycochan, hxkdidi, and 11 more reacted with thumbs up emoji
hanlichao, JessYanCoding, geeklx, kyriej, qrh672114236, and RubinTry reacted with laugh emoji
JessYanCoding, hanlichao, geeklx, qrh672114236, and RubinTry reacted with hooray emoji
JessYanCoding, hanlichao, geeklx, qrh672114236, VolleyCN, RubinTry, and AlanChenWei reacted with heart emoji
geeklx, Mswwww, JessYanCoding, qrh672114236, RubinTry, and Lightning627 reacted with rocket emoji
All reactions
Activity的方向是横屏的,手机方向竖屏,进入Activity的时候会加载网络数据延迟来绘制UI,如果进入Activity的瞬间应用缩小到后台,这时候会出现适配失效的bug。
#2 pc 0x66a228 libart.so
#3 pc 0x66a018 libart.so
at android.content.res.AssetManager.nativeGetResourceIdentifier(Native method)
at android.content.res.AssetManager.getResourceIdentifier(AssetManager.java:791)
at android.content.res.ResourcesImpl.getIdentifier(ResourcesImpl.java:281)
at android.content.res.Resources.getIdentifier(Resources.java:2164)
at me.jessyan.autosize.utils.ScreenUtils.getStatusBarHeight(ScreenUtils.java:43)
at me.jessyan.autosize.AutoSizeConfig.init(AutoSizeConfig.java:250)
at me.jessyan.autosize.AutoSizeConfig.init(AutoSizeConfig.java:205)
at me.jessyan.autosize.InitProvider.onCreate(InitProvider.java:44)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2451)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2421)
at android.app.ActivityThread.installProvider(ActivityThread.java:7509)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7032)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6921)
at android.app.ActivityThread.access$1600(ActivityThread.java:269)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2045)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:233)
at android.app.ActivityThread.main(ActivityThread.java:7959)
at java.lang.reflect.Method.invoke(Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)
针对双屏异显,搞了个工具类替换 Presentation 后,可以使双屏异显支持该屏幕适配方案
相关 Issues:#188 #278 #393
Java 版本:SecondaryDisplayHelper.java
Kotlin 版本:SecondaryDisplayHelper.kt
我目前的项目是个老项目,我二月底集成了今日头条适配,上架到市场之后,引发了多个ANR,main (native): tid=1 systid=20891 #00 pc 0x4b4cc libc.so
#1 pc 0x1af9c0 libart.so
#2 pc 0x66a228 libart.so
#3 pc 0x66a018 libart.so
at android.content.res.AssetManager.nativeGetResourceIdentifier(Native method)
at android.content.res.AssetManager.getResourceIdentifier(AssetManager.java:791)
at android.content.res.ResourcesImpl.getIdentifier(ResourcesImpl.java:281)
at android.content.res.Resources.getIdentifier(Resources.java:2164)
at me.jessyan.autosize.utils.ScreenUtils.getStatusBarHeight(ScreenUtils.java:43)
at me.jessyan.autosize.AutoSizeConfig.init(AutoSizeConfig.java:250)
at me.jessyan.autosize.AutoSizeConfig.init(AutoSizeConfig.java:205)
at me.jessyan.autosize.InitProvider.onCreate(InitProvider.java:44)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2451)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2421)
at android.app.ActivityThread.installProvider(ActivityThread.java:7509)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7032)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6921)
at android.app.ActivityThread.access$1600(ActivityThread.java:269)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2045)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:233)
at android.app.ActivityThread.main(ActivityThread.java:7959)
at java.lang.reflect.Method.invoke(Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)
这个是直接报今日头条适配的ANR错误
main (native): tid=1 systid=22251
at libcore.io.Linux.access(Native method)
at libcore.io.ForwardingOs.access(ForwardingOs.java:72)
at libcore.io.BlockGuardOs.access(BlockGuardOs.java:73)
at libcore.io.ForwardingOs.access(ForwardingOs.java:72)
at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:7839)
at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:281)
at java.io.File.exists(File.java:815)
at android.app.ContextImpl.ensureExternalDirsExistOrFilter(ContextImpl.java:2875)
at android.app.ContextImpl.getExternalCacheDirs(ContextImpl.java:825)
at android.content.ContextWrapper.getExternalCacheDirs(ContextWrapper.java:308)
at androidx.core.content.ContextCompat.getExternalCacheDirs(ContextCompat.java:434)
at androidx.core.content.FileProvider.parsePathStrategy(FileProvider.java:696)
at androidx.core.content.FileProvider.getPathStrategy(FileProvider.java:635)
at androidx.core.content.FileProvider.attachInfo(FileProvider.java:416)
at android.app.ActivityThread.installProvider(ActivityThread.java:7524)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7024)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6937)
at android.app.ActivityThread.access$1300(ActivityThread.java:263)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1991)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:240)
at android.app.ActivityThread.main(ActivityThread.java:8000)
at java.lang.reflect.Method.invoke(Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:603)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
经过研究发现 这两个问题是同属于同一问题导致,具体是由 今日头条的InitProvider.java:44 引发
------------------ 原始邮件 ------------------
发件人: ***@***.***>;
发送时间: 2022年3月28日(星期一) 晚上6:01
收件人: ***@***.***>;
抄送: ***@***.***>; ***@***.***>;
主题: Re: [JessYanCoding/AndroidAutoSize] JessYan: 今日头条屏幕适配方案常见问题汇总,提问前必看! (
#13)
返回页面A
点击“弹窗”,弹窗C出现。弹窗出现以后:此时ResourcesImpl的updateConfiguration函数被调用了。
mMetrics.setTo(metrics),resource的metrics被系统修改回默认值了。
关闭弹窗C,再次点击“弹窗”。显示异常。