getActivity / Toaster

Android 吐司框架,专治 Toast 各种疑难杂症
Apache License 2.0
3.2k stars 404 forks source link

单独吐司设置位置 #75

Closed Reginer closed 3 years ago

Reginer commented 3 years ago

如何给某一单独吐司设置位置? 比如

ToastUtils.setGravity(Gravity.TOP);
ToastUtils.show(R.string.verify_failed);
ToastUtils.setGravity(Gravity.CENTER);

这个写法理论上可以,先设置为显示在最上面,之后显示吐司,之后再设置回去,也就是其他吐司还显示在中间。 实际使用中发现,等到文字显示的时候,其实已经变成设置到中间了

getActivity commented 3 years ago

小伙子,这个是因为 setGravity 方法是同步的,而 show 方法是异步的,因为它最终会经过 Handler 才会显示出来,所以就会导致 show 方法比两次 setGravity 要慢执行。

getActivity commented 3 years ago

解决这个问题的方式也很简单,搭配 XToast 框架即可,让 XToast 去代替显示一些局部特殊定制的 Toast,具体代码如下:

new XToast<>(ToastActivity.this)
        .setDuration(2000)
        .setView(ToastUtils.getStyle().createView(getApplication()))
        .setAnimStyle(android.R.style.Animation_Toast)
        .setText(android.R.id.message, R.string.verify_failed)
        .setGravity(Gravity.TOP)
        .show();
Reginer commented 3 years ago

原因是什么我倒是知道,框架里显示延迟了200毫秒

Reginer commented 3 years ago

解决这个问题的方式也很简单,搭配 XToast 框架即可,让 XToast 去代替显示一些局部特殊定制的 Toast,具体代码如下:

new XToast<>(ToastActivity.this)
        .setDuration(2000)
        .setView(ToastUtils.getStyle().createView(getApplication()))
        .setAnimStyle(android.R.style.Animation_Toast)
        .setText(android.R.id.message, R.string.verify_failed)
        .setGravity(Gravity.TOP)
        .show();

了解了