JessYanCoding / JessYanCoding/AndroidAutoSize
横屏以高基准下,dialog高度异常
- Langage dominant
- Java
- Étoiles
- 13.7k
- Forks
- 2k
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
# 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:
```java
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:
弹窗布局代码:
```java
```
### Others:
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Évaluation
Cette issue n'a pas encore été évaluée.