Open SpannerBear opened 3 years ago
不太明白,你这个是怎么解决的?
横竖屏切换后,发现context的window密度发生了很大变化,导致内容变大了很多
不太明白,你这个是怎么解决的?
其实没解决,只是调用了cancelAdapt把全局的适配都取消了,然后这时再创建出来的view就变好了,其实用注释那里的方法应该比较好
的确是这样的,横竖屏切换以后,通过看项目的代码,可以项目里的autosize打断点看见,横竖屏切换后,项目回到前台,app的window的屏幕密度变大了,你可以在软件进入后台时切换回竖屏,进入前台时又回到横屏来解决
横竖屏切换后,发现context的window密度发生了很大变化,导致内容变大了很多
你应该是没有看到AutoSize横竖屏切换的使用问题,去文档找找看。然后用注释的方法拷贝一个Resources出来进行单独的cancelAdapt(),我上面AutoSizeCompat.cancelAdapt()是取消了全局适配,你没有处理横竖屏问题所以没有被重新适配
的确是这样的,横竖屏切换以后,通过看项目的代码,可以项目里的autosize打断点看见,横竖屏切换后,项目回到前台,app的window的屏幕密度变大了,你可以在软件进入后台时切换回竖屏,进入前台时又回到横屏来解决
嗯?我对比了几次都看到是一样的,我再试试看。。
的确是这样的,横竖屏切换以后,通过看项目的代码,可以项目里的autosize打断点看见,横竖屏切换后,项目回到前台,app的window的屏幕密度变大了,你可以在软件进入后台时切换回竖屏,进入前台时又回到横屏来解决
后来发现切换到后台回到前台之后AutoSize好像重新初始化了一遍,一些数据初始化成了竖屏尺寸数据,但应用页面显示是横屏的,因此尺寸变大,目前的解决方案是在getResource里面对autozize的横竖屏尺寸修改成正确的数值
Environment
- [x] Autosize Version: 1.2.0
- [x] Target Android Version: 任意
- [x] Device Model: 任意
- [x] Device Resolution: 任意
- [x] Design Size On AndroidManifest: 1335*768
Bug Description:
我们应用是横屏运行,在activity设置AutoSize适配以高768为基准,显示一个dialog, dialog高度一旦超出某个数值,其余内容将被裁剪掉,无法显示, 需要手动对dialog的window进行写死设置,但这个方法对一些需要根据内容自动适配高度的dialog来说有很大问题。 我在某一个回答下看到一个类似问题的方案,用来替换dialog的context:
public class AutoSizeContextWrapper extends android.content.ContextWrapper { private Resources mResources; public AutoSizeContextWrapper(Context base) { super(base); //这里调用 AutoSizeCompat.autoConvertDensity()也会出现UI放大 cancelAdapt(); } private synchronized void cancelAdapt() { Resources oldResources = super.getResources(); mResources = new Resources(oldResources.getAssets(), oldResources.getDisplayMetrics(), oldResources.getConfiguration()); AutoSizeCompat.cancelAdapt(mResources); //下面这种使用拷贝修改的cancelAdapt()避免全局Resource适配取消,这种方法也会出现UI放大 /*DisplayMetrics oldDisplayMetrics = oldResources.getDisplayMetrics(); DisplayMetrics displayMetrics = new DisplayMetrics(); displayMetrics.density = oldDisplayMetrics.density; displayMetrics.densityDpi = oldDisplayMetrics.densityDpi; displayMetrics.heightPixels = oldDisplayMetrics.heightPixels; displayMetrics.scaledDensity = oldDisplayMetrics.scaledDensity; displayMetrics.widthPixels = oldDisplayMetrics.widthPixels; displayMetrics.xdpi = oldDisplayMetrics.xdpi; displayMetrics.ydpi = oldDisplayMetrics.ydpi; Configuration configuration = new Configuration(oldResources.getConfiguration()); mResources = new Resources(oldResources.getAssets(),displayMetrics , configuration); cancelAdapt(mResources);*/ } @Override public Resources getResources() { return mResources; } }
使用这个方案之后dialog能够正常显示完全和自动适配高度了,dialog内的UI也没有真的失去适配, 不过后来发现在华为android10下出现切换到其他app之后再返回打开dialog,dialog尺寸会真的失去适配,尺寸放大了很多。 (复现路径->打开app到稳定页面,切后台->回前台->切后台->回前台->打开dialog,固定在第二次切后台回来后失去适配)
请问除了这个方案之外还有其他解决方法吗?
Screenshot
Related Code:
弹窗布局代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" android:orientation="vertical"> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具1" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具2" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具3" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具4" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具5" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具6" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具7" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具8" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具9" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具10" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具11" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具12" android:layout_marginTop="20dp" android:textSize="19dp" /> </LinearLayout>
Others:
DialogFragment是否有办法修改呢
如果dialogfragment的容器activity涉及到横竖屏切换的,建议实现库的取消自适应方法,沿用竖屏界面设置的显示密度,看代码可以发现AutoSize设置显示密度是每次onstart都会调用的
------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年8月30日(星期三) 下午4:14 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [JessYanCoding/AndroidAutoSize] 横屏以高基准下,dialog高度异常 (#320)
Environment
Autosize Version: 1.2.0
Target Android Version: 任意
Device Model: 任意
Device Resolution: 任意
Design Size On AndroidManifest: 1335*768
Bug Description:
我们应用是横屏运行,在activity设置AutoSize适配以高768为基准,显示一个dialog, dialog高度一旦超出某个数值,其余内容将被裁剪掉,无法显示, 需要手动对dialog的window进行写死设置,但这个方法对一些需要根据内容自动适配高度的dialog来说有很大问题。 我在某一个回答下看到一个类似问题的方案,用来替换dialog的context: public class AutoSizeContextWrapper extends android.content.ContextWrapper { private Resources mResources; public AutoSizeContextWrapper(Context base) { super(base); //这里调用 AutoSizeCompat.autoConvertDensity()也会出现UI放大 cancelAdapt(); } private synchronized void cancelAdapt() { Resources oldResources = super.getResources(); mResources = new Resources(oldResources.getAssets(), oldResources.getDisplayMetrics(), oldResources.getConfiguration()); AutoSizeCompat.cancelAdapt(mResources); //下面这种使用拷贝修改的cancelAdapt()避免全局Resource适配取消,这种方法也会出现UI放大 /DisplayMetrics oldDisplayMetrics = oldResources.getDisplayMetrics(); DisplayMetrics displayMetrics = new DisplayMetrics(); displayMetrics.density = oldDisplayMetrics.density; displayMetrics.densityDpi = oldDisplayMetrics.densityDpi; displayMetrics.heightPixels = oldDisplayMetrics.heightPixels; displayMetrics.scaledDensity = oldDisplayMetrics.scaledDensity; displayMetrics.widthPixels = oldDisplayMetrics.widthPixels; displayMetrics.xdpi = oldDisplayMetrics.xdpi; displayMetrics.ydpi = oldDisplayMetrics.ydpi; Configuration configuration = new Configuration(oldResources.getConfiguration()); mResources = new Resources(oldResources.getAssets(),displayMetrics , configuration); cancelAdapt(mResources);/ } @Override public Resources getResources() { return mResources; } }
使用这个方案之后dialog能够正常显示完全和自动适配高度了,dialog内的UI也没有真的失去适配, 不过后来发现在华为android10下出现切换到其他app之后再返回打开dialog,dialog尺寸会真的失去适配,尺寸放大了很多。 (复现路径->打开app到稳定页面,切后台->回前台->切后台->回前台->打开dialog,固定在第二次切后台回来后失去适配)
请问除了这个方案之外还有其他解决方法吗?
Screenshot
Related Code:
弹窗布局代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" @.***:color/white" android:orientation="vertical"> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具1" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具2" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具3" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具4" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具5" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具6" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具7" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具8" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具9" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具10" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具11" android:layout_marginTop="20dp" android:textSize="19dp" /> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:text="玩玩具12" android:layout_marginTop="20dp" android:textSize="19dp" /> </LinearLayout>
Others:
DialogFragment是否有办法修改呢
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>
Environment
Bug Description:
我们应用是横屏运行,在activity设置AutoSize适配以高768为基准,显示一个dialog, dialog高度一旦超出某个数值,其余内容将被裁剪掉,无法显示, 需要手动对dialog的window进行写死设置,但这个方法对一些需要根据内容自动适配高度的dialog来说有很大问题。 我在某一个回答下看到一个类似问题的方案,用来替换dialog的context:
使用这个方案之后dialog能够正常显示完全和自动适配高度了,dialog内的UI也没有真的失去适配, 不过后来发现在华为android10下出现切换到其他app之后再返回打开dialog,dialog尺寸会真的失去适配,尺寸放大了很多。 (复现路径->打开app到稳定页面,切后台->回前台->切后台->回前台->打开dialog,固定在第二次切后台回来后失去适配)
请问除了这个方案之外还有其他解决方法吗?
Screenshot
Related Code:
弹窗布局代码:
Others: