-
Notifications
You must be signed in to change notification settings - Fork 2k
RecyclerView 数据切换density变动,会出现适配异常,item一会大一会小 #152
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
爱神 |
用这个方案估计能完美解决了: private static final float FONT_NOT_SCALE = 1f;
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.fontScale != FONT_NOT_SCALE) {
getResources();
}
}
@Override
public Resources getResources() {
Resources res = super.getResources();
//规避可能的空指针异常
if (res == null) {
return null;
}
//强制字体大小不随系统改变而改变
if (res.getConfiguration().fontScale != FONT_NOT_SCALE) {
Configuration newConfig = new Configuration();
newConfig.setToDefaults();
res.updateConfiguration(newConfig, res.getDisplayMetrics());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
createConfigurationContext(newConfig);
} else {
res.updateConfiguration(newConfig, res.getDisplayMetrics());
}
}
//用于解决本来适配正常的布局突然出现适配失效、适配异常等问题
AutoSizeCompat.autoConvertDensity(res, getSizeInDp(), isBaseOnWidth());
return res;
} |
@liyujiang-gzu 建议 newConfig.setToDefaults(); 这个 API 少用,这个不光会把 fontScale 置为 1,还会将系统内的很多参数重置,从而影响其他框架,建议使用框架的 API,AutoSizeConfig.getInstance().setExcludeFontScale(true) |
重写 |
这个问题,我在 这篇文章 中关于三方库适配时,提到过,就是三方库 View 的设计图尺寸和本页面的设计图尺寸不一致就会导致三方库适配的异常,你需要做的就是,取消这个三方库 View 的适配,或者整个项目使用副单位,放弃对所有三方库 View 的适配 也可以在 show 之前,修改设计图尺寸,然后在 show 后,修改回来,但我估计 getResources() 调用很频繁,难以控制 |
谢谢解答。 |
@liyujiang-gzu 你这个方法不知道是不是在所有设备和环境中都可以生效,实在不行可以选择放弃适配 不过 AndroidAutoSize,还支持一个很赞的功能,可以让项目中给主单位和副单位各设置一个设计图尺寸,并且同一个页面可以同时使用主单位和副单位,并允许这两个单位的设计图尺寸不同,貌似这个功能应用到你这个需求就可以实现,你可以试试。 AutoSizeConfig.getInstance().getUnitsManager()
.setDesignSize(); |
我的小米k20 pro 手机上 在fragment中 使用RecyclerView 刚进来的时候 正常 从别的界面回来的时候就开始一个item占整个屏幕了。整个列表全部变形 我已经在onResume 已经调用过了 完全没用 不知道为啥? 求解释下 |
也在 onBindViewHolder设置了 |
@OverRide
public Resources getResources() {
Resources oldResources = super.getResources();
if (mResources == null)
mResources = new Resources(oldResources.getAssets(), oldResources.getDisplayMetrics(), oldResources.getConfiguration());
Configuration cf = super.getResources().getConfiguration(); //获取设置的配置信息
int ori = cf.orientation; //获取屏幕方向
getHandler(this).post(new Runnable() {
@OverRide
public void run() {
if (ori == Configuration.ORIENTATION_LANDSCAPE) {
//横屏
AutoSizeCompat.autoConvertDensityBaseOnWidth(mResources, AutoSizeConfig.getInstance().getDesignHeightInDp());
} else if (ori == Configuration.ORIENTATION_PORTRAIT) {
AutoSizeCompat.autoConvertDensityBaseOnWidth(mResources, AutoSizeConfig.getInstance().getDesignWidthInDp());
}
}
});
return mResources;
}
在 2021-12-16 10:38:58,"陈凡" ***@***.***> 写道:
也在 onBindViewHolder设置了
AutoSizeConfig.getInstance().isExcludeFontScale = true
AutoSize.autoConvertDensity(context as Activity?,750f, true)
还是没用
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications on the go with GitHub Mobile for iOS or Android.
|
Environment
Bug Description:
Log:
Screenshot
Related Code:
Others:
The text was updated successfully, but these errors were encountered: