JessYanCoding / JessYanCoding/AndroidAutoSize
关于Compose的适配和源码的其他几处疑问
- Ngôn ngữ chính
- Java
- Star
- 13.7k
- Fork
- 2k
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
### Environment
- [x] Autosize Version: 1.2.1
- [x] Target Android Version: 不重要
- [x] Device Model: 不重要
- [x] Device Resolution: 不重要
- [x] Design Size On AndroidManifest: 不重要
一直以来都是使用AndroidAutoSize进行屏幕适配,也都一如既往的好用,期间并没有去关注源代码实现,直到最近开始接触使用Compose UI开发,使用一段时间并没有觉得有何不妥,之前也进行过了测试确认dp单位的计算,直到测试组有反馈字体问题,具体表现为受系统字体影响无法解决(目标需求不受系统字体影响),当系统字体有缩放时,Componse 使用sp单位的字体会同步系统字体,并且设置AutoSizeConfig.isExcludeFontScale无效。
源代码分析原因:
AndroidAutoSize字体上处理为displayMetrics.scaledDensity 修改
但Compose源码获取context.resources.configuration.fontScale
--------------------------compose包源码---------------------------------
package androidx.compose.ui.unit
import android.content.Context
/**
* Creates a [Density] for this [Context].
*
* @param context density values will be extracted from this [Context]
*/
fun Density(context: Context): Density =
Density(
context.resources.displayMetrics.density,
context.resources.configuration.fontScale <------------ 为什么AndroidAutoSize无法屏蔽系统字体缩放得原因
)
//----------------转换函数----------------------------------
@Stable
fun TextUnit.toPx(): Float {
check(type == TextUnitType.Sp) { "Only Sp can convert to Px" }
return value * fontScale * density
}
--------------------------compose包源码---------------------------------
所以适配Compose时AutoSize应该需要一点点修改,有时间我fork一下
其他阅读源码疑问:
1. 为什么ActivityLifecycleCallbacksImpl中onActivityCreated和onActivityStarted重复两次mAutoAdaptStrategy.applyAdapt(activity, activity);
2. 为什么AutoSize在修改activity上下文同时每次修改Application的DisplayMetrics,不知道是不是这个影响了我下面的这个问题,最近在对接头条广告SDK时,插屏广告被框架影响,使用前已经了解了插屏在哪里桩位的activiy里,并且使用ExternalAdaptManager进行了屏蔽(日志也确实打印了...canceled the adaptation!),结果插屏UI适配失效,在调用广告之前热关闭框架功能也处理不了插屏移位的问题(不知道是不是有更深层的原因,导致上下文DisplayMetrics没有处理完成),经过测试,只有在调用广告处的Activity取消了适配(热插不起作用),头条广告UI才不会位移,但是我觉得不应该,因为该广告显示在另一个Activity层,并且不是一个Dialog。目前没有找到原因,只能调用处实现CancelAdapt
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Đánh giá
Issue này chưa được đánh giá.