AndroidAutoSize icon indicating copy to clipboard operation
AndroidAutoSize copied to clipboard

折叠屏手机不支持适配(希望作者适配下)

Open githubwxq opened this issue 4 years ago • 13 comments

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:

githubwxq avatar Jul 20 '20 09:07 githubwxq

框架的原理是修改 denisty 达到适配的效果,所以这个库的功能只有确认 denisty 为正确值并且可用,至于这个框架用在什么样的设备,什么屏幕上不是框架所关心的,理论上只要是在运行 Android 系统的设备上都可用,至于你说的折叠屏手机适配问题,你也没有贴出图片和相关细节,我也没有折叠屏手机,所以也不能给你答案。

JessYanCoding avatar Aug 01 '20 04:08 JessYanCoding

您好,我们也在做折叠屏,发现修改了屏幕分辨率后,只有recyclerview这类重新加载数据的布局生效,原来界面中的button等没有改过的控件会被放大或者缩小,比例失衡 可以使用 adb shell wm size 2200x2480 adb shell wm size 1148x2480 adb shell wm size reset 来模拟折叠屏效果,希望作者可以提供一些思路

lixiaohui8636 avatar Nov 30 '20 09:11 lixiaohui8636

在每次屏幕尺寸发生改变时 AutoSize.autoConvertDensityOfGlobal(activity) 设置 Density 并手动刷新所有的 UI 内容

JessYanCoding avatar Jul 06 '21 06:07 JessYanCoding

@lixiaohui8636 折叠屏你怎么适配的

guowenqiang avatar Aug 26 '21 06:08 guowenqiang

@lixiaohui8636 折叠屏你怎么适配的

按照作者思路,设置Density后强制重新刷新布局

lixiaohui8636 avatar Aug 26 '21 06:08 lixiaohui8636

@lixiaohui8636 折叠屏你怎么适配的

按照作者思路,设置Density后强制重新刷新布局

你好,你是怎么刷新的,我这边刷新没效果呀。能看下刷新代码吗?谢谢!

MoYuFly avatar Nov 16 '21 02:11 MoYuFly

@lixiaohui8636 折叠屏你怎么适配的

按照作者思路,设置Density后强制重新刷新布局

你好,你是怎么刷新的,我这边刷新没效果呀。能看下刷新代码吗?谢谢!

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); //这里判断折叠屏后,重新刷新数据 }

lixiaohui8636 avatar Nov 16 '21 02:11 lixiaohui8636

@lixiaohui8636 折叠屏你怎么适配的

按照作者思路,设置Density后强制重新刷新布局

你好,你是怎么刷新的,我这边刷新没效果呀。能看下刷新代码吗?谢谢!

@OverRide public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); //这里判断折叠屏后,重新刷新数据 }

那这样的话,岂不是每个页面都要做这个操作了,我这儿目前是正常屏1080宽度,我用的pt,如果展开折叠屏我把宽度改为1920,这样让大屏缩小显示更多内容,然后就有一些rv容易失控,特别是横向的。主页面嵌套很多fragment,有没有比较好的刷新策略呢?

MoYuFly avatar Nov 16 '21 02:11 MoYuFly

@lixiaohui8636 折叠屏你怎么适配的

按照作者思路,设置Density后强制重新刷新布局

你好,你是怎么刷新的,我这边刷新没效果呀。能看下刷新代码吗?谢谢!

@OverRide public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); //这里判断折叠屏后,重新刷新数据 }

那这样的话,岂不是每个页面都要做这个操作了,我这儿目前是正常屏1080宽度,我用的pt,如果展开折叠屏我把宽度改为1920,这样让大屏缩小显示更多内容,然后就有一些rv容易失控,特别是横向的。主页面嵌套很多fragment,有没有比较好的刷新策略呢?

这个就看你们封装的怎么样了,我们是base里面统一处理就行了

lixiaohui8636 avatar Nov 16 '21 03:11 lixiaohui8636

@lixiaohui8636 折叠屏你怎么适配的

按照作者思路,设置Density后强制重新刷新布局

你好,你是怎么刷新的,我这边刷新没效果呀。能看下刷新代码吗?谢谢!

@OverRide public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); //这里判断折叠屏后,重新刷新数据 }

那这样的话,岂不是每个页面都要做这个操作了,我这儿目前是正常屏1080宽度,我用的pt,如果展开折叠屏我把宽度改为1920,这样让大屏缩小显示更多内容,然后就有一些rv容易失控,特别是横向的。主页面嵌套很多fragment,有没有比较好的刷新策略呢?

这个就看你们封装的怎么样了,我们是base里面统一处理就行了

了解了,Thanks♪(・ω・)ノ

MoYuFly avatar Nov 16 '21 03:11 MoYuFly

个人建议,用户期望的是,在折叠屏屏幕展开时,屏幕变大后,能显示更多的内容和 UI 元素,类似手机版微信扩展为 pad 版微信,而不是简单的将手机版微信的 UI 百分比变大或者横屏,所以我们开发者最完美的折叠屏适配方式是折叠屏有两套布局,屏幕折叠和屏幕展开对应不同的布局

JessYanCoding avatar Nov 17 '21 03:11 JessYanCoding

个人认为,针对大屏和普通屏幕出两套尺寸,共用一套响应式布局,手动在生命周期中调用utoSize.autoConvertDensity()等方法,是目前我能想到最理想的方案。

yiwanwanwan avatar Aug 09 '22 04:08 yiwanwanwan

目前已有方案,按照华为教程。判定屏幕折叠和不折叠,平板好像也适用,就是判定当前屏幕是不是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倍,然后刷新适配器。毕竟用折叠屏的还是少数。

MoYuFly avatar Jun 25 '23 09:06 MoYuFly