AndroidAutoSize
AndroidAutoSize copied to clipboard
折叠屏手机不支持适配(希望作者适配下)
Environment
- [x] Autosize Version:
- [x] Target Android Version:
- [x] Device Model:
- [x] Device Resolution:
- [x] Design Size On AndroidManifest:
Bug Description:
Log:
Screenshot
Related Code:
Others:
框架的原理是修改 denisty 达到适配的效果,所以这个库的功能只有确认 denisty 为正确值并且可用,至于这个框架用在什么样的设备,什么屏幕上不是框架所关心的,理论上只要是在运行 Android 系统的设备上都可用,至于你说的折叠屏手机适配问题,你也没有贴出图片和相关细节,我也没有折叠屏手机,所以也不能给你答案。
您好,我们也在做折叠屏,发现修改了屏幕分辨率后,只有recyclerview这类重新加载数据的布局生效,原来界面中的button等没有改过的控件会被放大或者缩小,比例失衡 可以使用 adb shell wm size 2200x2480 adb shell wm size 1148x2480 adb shell wm size reset 来模拟折叠屏效果,希望作者可以提供一些思路
在每次屏幕尺寸发生改变时 AutoSize.autoConvertDensityOfGlobal(activity) 设置 Density 并手动刷新所有的 UI 内容
@lixiaohui8636 折叠屏你怎么适配的
@lixiaohui8636 折叠屏你怎么适配的
按照作者思路,设置Density后强制重新刷新布局
@lixiaohui8636 折叠屏你怎么适配的
按照作者思路,设置Density后强制重新刷新布局
你好,你是怎么刷新的,我这边刷新没效果呀。能看下刷新代码吗?谢谢!
@lixiaohui8636 折叠屏你怎么适配的
按照作者思路,设置Density后强制重新刷新布局
你好,你是怎么刷新的,我这边刷新没效果呀。能看下刷新代码吗?谢谢!
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); //这里判断折叠屏后,重新刷新数据 }
@lixiaohui8636 折叠屏你怎么适配的
按照作者思路,设置Density后强制重新刷新布局
你好,你是怎么刷新的,我这边刷新没效果呀。能看下刷新代码吗?谢谢!
@OverRide public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); //这里判断折叠屏后,重新刷新数据 }
那这样的话,岂不是每个页面都要做这个操作了,我这儿目前是正常屏1080宽度,我用的pt,如果展开折叠屏我把宽度改为1920,这样让大屏缩小显示更多内容,然后就有一些rv容易失控,特别是横向的。主页面嵌套很多fragment,有没有比较好的刷新策略呢?
@lixiaohui8636 折叠屏你怎么适配的
按照作者思路,设置Density后强制重新刷新布局
你好,你是怎么刷新的,我这边刷新没效果呀。能看下刷新代码吗?谢谢!
@OverRide public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); //这里判断折叠屏后,重新刷新数据 }
那这样的话,岂不是每个页面都要做这个操作了,我这儿目前是正常屏1080宽度,我用的pt,如果展开折叠屏我把宽度改为1920,这样让大屏缩小显示更多内容,然后就有一些rv容易失控,特别是横向的。主页面嵌套很多fragment,有没有比较好的刷新策略呢?
这个就看你们封装的怎么样了,我们是base里面统一处理就行了
@lixiaohui8636 折叠屏你怎么适配的
按照作者思路,设置Density后强制重新刷新布局
你好,你是怎么刷新的,我这边刷新没效果呀。能看下刷新代码吗?谢谢!
@OverRide public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); //这里判断折叠屏后,重新刷新数据 }
那这样的话,岂不是每个页面都要做这个操作了,我这儿目前是正常屏1080宽度,我用的pt,如果展开折叠屏我把宽度改为1920,这样让大屏缩小显示更多内容,然后就有一些rv容易失控,特别是横向的。主页面嵌套很多fragment,有没有比较好的刷新策略呢?
这个就看你们封装的怎么样了,我们是base里面统一处理就行了
了解了,Thanks♪(・ω・)ノ
个人建议,用户期望的是,在折叠屏屏幕展开时,屏幕变大后,能显示更多的内容和 UI 元素,类似手机版微信扩展为 pad 版微信,而不是简单的将手机版微信的 UI 百分比变大或者横屏,所以我们开发者最完美的折叠屏适配方式是折叠屏有两套布局,屏幕折叠和屏幕展开对应不同的布局
个人认为,针对大屏和普通屏幕出两套尺寸,共用一套响应式布局,手动在生命周期中调用utoSize.autoConvertDensity()等方法,是目前我能想到最理想的方案。
目前已有方案,按照华为教程。判定屏幕折叠和不折叠,平板好像也适用,就是判定当前屏幕是不是larg屏幕来动态更改基准值。 在onConfigurationChanged 方法中进行判定。记得预设一个默认值,在baseactivity中 //记录是否是大屏,或者折叠屏 public boolean isLargeScreen = false;
在onCreate(Bundle savedInstanceState)中 isLargeScreen = (mConfiguration.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE; 在onConfigurationChanged 中进行折叠屏判定,至于怎么给别的页面,用全局值,发送广播,消息之类都行 @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); int changes = mConfiguration.updateFrom(newConfig); boolean screenLayoutChanged = (changes & ActivityInfo.CONFIG_SCREEN_SIZE) != 0; if (screenLayoutChanged) { // screenLayoutChanged为true,说明系统的屏幕尺寸发生了变化 int screenSize = newConfig.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK; // screenSize: Configuration.SCREENLAYOUT_SIZE_NORMAL为小屏,Configuration.SCREENLAYOUT_SIZE_LARGE为大屏 isLargeScreen = screenSize == Configuration.SCREENLAYOUT_SIZE_LARGE; JLog.d("isLargeScreen: " + isLargeScreen); //rx发送屏幕切换 RxBus2.getInstance().post(new RxEvent(Constants.RxEventKey.FOLD_SCREEN_CHANGE)); //广播发送 Intent intent=new Intent(Constants.RxEventKey.FOLD_SCREEN_CHANGE); LocalBroadcastManager.getInstance(this).sendBroadcast(intent); getResources(); } }
在getResources()方法中,其中第三个basOnSizeInDp 的赋值,是我同事解决横屏时三方库也用dp被异常放大的解决办法。 @Override public Resources getResources() { Resources resources = super.getResources(); if (Utils.isMainThread()) { float basOnSizeInDp = 360; if (isLargeScreen) { basOnSizeInDp =720; } if (mConfiguration != null && mConfiguration.orientation == Configuration.ORIENTATION_LANDSCAPE) { //横屏状态,要通过比例重新计算basOnSizeInDp float windowWidth = DisplayUtils.getWindowWidth(this); float windowHeight = DisplayUtils.getWindowHeight(this); basOnSizeInDp = (windowWidth / windowHeight) * basOnSizeInDp; } AutoSizeCompat.autoConvertDensity(resources, basOnSizeInDp, true); } return resources; }
这样操作后,可以让列表在折叠屏展开后,看起来稍微顺眼一些,没那么尴尬。但是图片如果是横向父布局充满的还是会被裁切的难受。 为了让列表好受一些: 1、你可以采取瀑布流StaggeredGridLayoutManager模式,动态修改spanCount的值为1,或2,这样展开后的效果,等于2列普通屏幕的效果。(动态修改的前提是,需要接收上面发送的消息,然后对recycleview的layoutmager进行修改) 2、可以使用列表流布局FlexboxLayoutManager,这样,展开后,让他沿着横轴方向排列,设计好横向宽度也可以达到1的效果,但是当item 多样化时,显示效果比较差。 这是我关于使用折叠屏,但是设计图只有一套时的探索方案。目前我用的是仅仅修改宽度值为原来的2倍,然后刷新适配器。毕竟用折叠屏的还是少数。