Skip to content
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

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

Open
5 tasks done
superzhangjh opened this issue Apr 29, 2020 · 11 comments

Comments

@superzhangjh
Copy link

Environment

  • Autosize Version:
  • Target Android Version:
  • Device Model:
  • Device Resolution:
  • Design Size On AndroidManifest:

Bug Description:

Log:



Screenshot

Related Code:

  

Others:

@superzhangjh
Copy link
Author

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

@JessYanCoding
Copy link
Owner

@superzhangjh
Copy link
Author

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

@JessYanCoding
Copy link
Owner

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

@fanturbo
Copy link

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

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

@leocreater
Copy link

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

@Norbara
Copy link

Norbara commented Jun 12, 2020

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

@JessYanCoding
Copy link
Owner

JessYanCoding commented Jun 16, 2020

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

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

@oOJohn6Oo
Copy link

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
Copy link

majunm commented Oct 19, 2020

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
Copy link

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)
    }

可以的,有用

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants