JessYanCoding / JessYanCoding/AndroidAutoSize

关于Compose的适配和源码的其他几处疑问

Aberta
#397 2 comentários 1 reação 0 responsáveis Ver no GitHub
Linguagem predominante
Java
Estrelas
13.7k
Forks
2k
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

### 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

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.