Closed berial closed 2 years ago
这是警告还是崩溃?
Android12的确不允许继续使用setGravity
, 也不允许自定义吐司
希望贴出相对完整的异常信息
上面提到的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)
你有自定义某些操作吗?还是说demo复现的
就这个,没别的了: ToastConfig.apply { onToast { , -> setGravity(Gravity.CENTER, 0, 0) } }
错误提示说了12不准用这个自定义吐司了
不考虑兼容一下12吗
这是系统限制,无法兼容。 不过崩溃考虑解决下
我看他这个可以,我用了正常显示了: https://github.com/getActivity/ToastUtils
我看他这个可以,我用了正常显示了: https://github.com/getActivity/ToastUtils
居中有效吗?
有效果
等我研究尝试兼容下(不排除不去适配, 因为得考虑未来继续兼容), 现在临时解决下不设置居中(符合官方要求).
或者直接自定义一个toast()
函数里面使用ToastUtils. 修改导包即可全局替换
我在Android12的模拟器上无法复现, 并且我将项目目标sdk调整成31依然不会崩溃. 自定义和调整Gravity都没问题. 你能在模拟器上复现吗?
可以复现,代码我放到: https://github.com/Berial/TestToast 模拟器是Pixel 2 API 31, 1080x1920:420dpi, x86_64
问题原因是
Gravity无效
不允许后台显示
你像Demo一样设置一个自定义视图即可解决崩溃问题同时设置居中. ToastUtils是全部自定义吐司和在后台自动使用文字吐司. 另外我会开始兼容和重构吐司, 依旧使用官方公开Api保证兼容问题.
最新版本中改为ToastFactory来构建吐司, 并且提供ToastGravityFactory
默认居中的吐司样式
怎么关闭了
最新版本中改为ToastFactory来构建吐司, 并且提供
ToastGravityFactory
默认居中的吐司样式
因为解决了, 其实这本也不属于本项目的bug, 不过提供了默认实现ToastGravityFactory
为避免有相同在Android12没有适配出现问题的开发者, 本问题置顶
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