AndroidAutoSize icon indicating copy to clipboard operation
AndroidAutoSize copied to clipboard

Activity的方向是横屏的,手机方向竖屏,进入Activity的时候会加载网络数据延迟来绘制UI,如果进入Activity的瞬间应用缩小到后台,这时候会出现适配失效的bug。

Open superzhangjh opened this issue 4 years ago • 11 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:

superzhangjh avatar Apr 29 '20 02:04 superzhangjh

image AutoSizeConfig的onConfigurationChanged回调时计算的宽高与实际屏幕方向的宽高对调了。

superzhangjh avatar Apr 29 '20 02:04 superzhangjh

https://github.com/JessYanCoding/AndroidAutoSize/blob/master/demo/src/main/java/me/jessyan/autosize/demo/BaseApplication.java#L84

按照你的逻辑,自己改下屏幕的高宽

JessYanCoding avatar May 07 '20 08:05 JessYanCoding

我试过了这个方法去设置了的,还是一样存在这个问题。旋转屏幕如果正好在绘制UI,就会出现上述的问题。

superzhangjh avatar May 09 '20 05:05 superzhangjh

你就屏幕旋转完,设置好正确的屏幕尺寸在绘制ui。

JessYanCoding avatar May 09 '20 08:05 JessYanCoding

你就屏幕旋转完,设置好正确的屏幕尺寸在绘制ui。

如果在一个横屏页面给上一个竖屏页面发消息弹dialog,这时候是这个dialog显示是不正确的。。场景和业务只能是横屏给发,不能竖屏检查。。

fanturbo avatar May 21 '20 12:05 fanturbo

横屏,设置高度为375,然后去微信分享,再取消回来,也会适配失效。toast都没法正常显示了,dialog也一样

leocreater avatar May 28 '20 02:05 leocreater

不用旋转也是会出现这类情况,常驻后台一天 在应用不被杀死的情况 进入应用 整个都ui都失效了

Norbara avatar Jun 12 '20 08:06 Norbara

上面说的所有问题,都是在 UI 显示之前,density未能正确切换成期望的值,导致适配失效,框架只会在 Activity setContentview 之前,重新计算并且设置 density,其他所有的未知的业务流程,都需要你自己在 UI 显示之前重新计算并设置一个你期望的 density,比如上面所说进入后台后,再回到前台,App 会在什么时候回到前台,框架并不知道,而 density 是整个进程公有的,所以在回到前台前并不保证它的值没被其他代码所修改,所以这里需要你自己去设置一个正确的值,再刷新 UI。

所有原理包括出现问题的原因,都在 这里 讲的很清楚。

JessYanCoding avatar Jun 16 '20 04:06 JessYanCoding

BaseActivity 重写下就搞定了,怎么转、怎么测试都没事。

    override fun getResources(): Resources {
        if (Looper.getMainLooper().thread == Thread.currentThread()) AutoSizeCompat.autoConvertDensity(
            super.getResources(), 1024f, AutoSizeConfig.getInstance().screenWidth > AutoSizeConfig.getInstance().screenHeight
        )
        return super.getResources()
    }

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) AutoSize.autoConvertDensity(this, 1024f, true)
    }

oOJohn6Oo avatar Jun 17 '20 06:06 oOJohn6Oo

BaseActivity 重写下就搞定了,怎么转、怎么测试都没事。

    override fun getResources(): Resources {
        if (Looper.getMainLooper().thread == Thread.currentThread()) AutoSizeCompat.autoConvertDensity(
            super.getResources(), 1024f, AutoSizeConfig.getInstance().screenWidth > AutoSizeConfig.getInstance().screenHeight
        )
        return super.getResources()
    }

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) AutoSize.autoConvertDensity(this, 1024f, true)
    }

我这样写 还真测出事了

majunm avatar Oct 19 '20 04:10 majunm

BaseActivity 重写下就搞定了,怎么转、怎么测试都没事。

    override fun getResources(): Resources {
        if (Looper.getMainLooper().thread == Thread.currentThread()) AutoSizeCompat.autoConvertDensity(
            super.getResources(), 1024f, AutoSizeConfig.getInstance().screenWidth > AutoSizeConfig.getInstance().screenHeight
        )
        return super.getResources()
    }

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) AutoSize.autoConvertDensity(this, 1024f, true)
    }

可以的,有用

hyvenzhu avatar Apr 15 '21 01:04 hyvenzhu