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

Android 12 (Api 31) 吐司居中导致出现的异常 #6

Closed
berial opened this issue Dec 13, 2021 · 17 comments
Closed

Android 12 (Api 31) 吐司居中导致出现的异常 #6

berial opened this issue Dec 13, 2021 · 17 comments

Comments

@berial
Copy link

berial commented Dec 13, 2021

Error1: setGravity() shouldn't be called on text toasts, the values won't be used

Toast.java 367

Error2: You must either set a text or a view

Toast.java 191

@liangjingkanji
Copy link
Owner

liangjingkanji commented Dec 13, 2021

这是警告还是崩溃?
Android12的确不允许继续使用setGravity, 也不允许自定义吐司

希望贴出相对完整的异常信息

@berial
Copy link
Author

berial commented Dec 13, 2021

上面提到的Error2会导致App崩溃,下面是完整信息:

2021-12-13 13:37:53.547 E/Toast: setGravity() shouldn't be called on text toasts, the values won't be used
2021-12-13 13:37:53.550 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.tuanshang.aoye.app, PID: 4656
java.lang.IllegalStateException: You must either set a text or a view
at com.android.internal.util.Preconditions.checkState(Preconditions.java:215)
at android.widget.Toast.show(Toast.java:191)
at com.drake.tooltip.ToastKt$showDefault$1.invoke(Toast.kt:87)
at com.drake.tooltip.ToastKt$showDefault$1.invoke(Unknown Source:0)
at com.drake.tooltip.ToastConfigKt.runMain(ToastConfig.kt:40)
at com.drake.tooltip.ToastKt.showDefault(Toast.kt:77)
at com.drake.tooltip.ToastKt.showDefault$default(Toast.kt:74)
at com.drake.tooltip.ToastKt.toast(Toast.kt:15)
at com.berial.libcommon.util.UtilKt.toast(util.kt:31)
at com.berial.libcommon.util.UtilKt.toast(util.kt:35)
at com.tuanshang.blockchain.app.ui.login.LoginFragment.login(LoginFragment.kt:91)
at com.tuanshang.blockchain.app.databinding.FragmentLoginBindingImpl._internalCallbackOnClick(FragmentLoginBindingImpl.java:757)
at com.tuanshang.blockchain.app.generated.callback.OnClickListener.onClick(OnClickListener.java:11)
at com.tuanshang.blockchain.app.ext.ViewBindingAdapter.setOnClick$lambda-0(ViewBindingAdapter.kt:35)
at com.tuanshang.blockchain.app.ext.ViewBindingAdapter.$r8$lambda$vEZKxvEoYwEW0KUNZ5xoHT3n4es(Unknown Source:0)
at com.tuanshang.blockchain.app.ext.ViewBindingAdapter$$ExternalSyntheticLambda0.onClick(Unknown Source:6)
at android.view.View.performClick(View.java:7441)
at android.view.View.performClickInternal(View.java:7418)
at android.view.View.access$3700(View.java:835)
at android.view.View$PerformClick.run(View.java:28676)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

@liangjingkanji
Copy link
Owner

你有自定义某些操作吗?还是说demo复现的

@berial
Copy link
Author

berial commented Dec 13, 2021

就这个,没别的了:
ToastConfig.apply {
onToast { _, _ ->
setGravity(Gravity.CENTER, 0, 0)
}
}

@liangjingkanji
Copy link
Owner

错误提示说了12不准用这个自定义吐司了

@berial
Copy link
Author

berial commented Dec 13, 2021

不考虑兼容一下12吗

@liangjingkanji
Copy link
Owner

这是系统限制,无法兼容。 不过崩溃考虑解决下

@berial
Copy link
Author

berial commented Dec 13, 2021

我看他这个可以,我用了正常显示了: https://github.com/getActivity/ToastUtils

@liangjingkanji
Copy link
Owner

我看他这个可以,我用了正常显示了: https://github.com/getActivity/ToastUtils

居中有效吗?

@berial
Copy link
Author

berial commented Dec 13, 2021

有效果
居中提示

@liangjingkanji
Copy link
Owner

等我研究尝试兼容下(不排除不去适配, 因为得考虑未来继续兼容), 现在临时解决下不设置居中(符合官方要求).
或者直接自定义一个toast()函数里面使用ToastUtils. 修改导包即可全局替换

@liangjingkanji
Copy link
Owner

我在Android12的模拟器上无法复现, 并且我将项目目标sdk调整成31依然不会崩溃. 自定义和调整Gravity都没问题. 你能在模拟器上复现吗?

@berial
Copy link
Author

berial commented Jan 7, 2022

可以复现,代码我放到: https://github.com/Berial/TestToast
模拟器是Pixel 2 API 31, 1080x1920:420dpi, x86_64

@liangjingkanji
Copy link
Owner

问题原因是

  1. 文字吐司设置Gravity无效
  2. 自定义吐司下Gravity有效, 但是不允许后台显示

你像Demo一样设置一个自定义视图即可解决崩溃问题同时设置居中.
ToastUtils是全部自定义吐司和在后台自动使用文字吐司. 另外我会开始兼容和重构吐司, 依旧使用官方公开Api保证兼容问题.

@liangjingkanji
Copy link
Owner

最新版本中改为ToastFactory来构建吐司, 并且提供ToastGravityFactory默认居中的吐司样式

@liangjingkanji liangjingkanji pinned this issue May 11, 2022
@liangjingkanji liangjingkanji changed the title Android 12 (Api 31) 出现的异常 Android 12 (Api 31) 吐司居中导致出现的异常 May 11, 2022
@owant
Copy link

owant commented May 11, 2022

怎么关闭了

@liangjingkanji
Copy link
Owner

liangjingkanji commented May 11, 2022

最新版本中改为ToastFactory来构建吐司, 并且提供ToastGravityFactory默认居中的吐司样式

因为解决了, 其实这本也不属于本项目的bug, 不过提供了默认实现ToastGravityFactory

为避免有相同在Android12没有适配出现问题的开发者, 本问题置顶

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

3 participants