100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android 自定义Toast实现多次触发只会显示一次toast

Android 自定义Toast实现多次触发只会显示一次toast

时间:2018-08-28 10:38:09

相关推荐

Android 自定义Toast实现多次触发只会显示一次toast

#使用场景描述 当我们处于某个场景,例如一个按钮可以触发toast的显示,当你在多次点击按钮时,会多次触发toast的显示。而调用android原生的toast的makeText的方式所生产的toast是被加到一个队列里面,然后依次执行。这样就会出现多次点击按钮触发的toast一直会按队列出现在界面上,而且即使退出了当前界面也会一直出现在手机上,而且无法手动取消,这时的用户体验变得非常的差。这时就可以使用自定义样式的toast。

#效果展示

#自定义toast的好处 1.多次触发也只显示一个toast,只是把toast的内容替换成最新一次触发需要显示的内容。

2.可以手动取消toast的显示(不过这个取消还是会带有一点延迟效果,不是马上就消失,而是渐渐的消失,该功能主要是通过单例来实现,一直保持只有一个toast实例,这样在调用cancel方法时就能把toast给取消掉。)

3.可以自定义toast的样式,这样就可以做到定制的效果。

#使用方法 ####1.将自定义toast引入你们的工程中,以下是toast的源码。

public enum CustomToast {INSTANCE;// 实现单例private Toast mToast;private TextView mTvToast;public void showToast(Context ctx, String content) {if (mToast == null) {mToast = new Toast(ctx);mToast.setGravity(Gravity.CENTER, 0, 0);//设置toast显示的位置,这是居中mToast.setDuration(Toast.LENGTH_SHORT);//设置toast显示的时长View _root = LayoutInflater.from(ctx).inflate(R.layout.toast_custom_common, null);//自定义样式,自定义布局文件mTvToast = (TextView) _root.findViewById(R.id.tvCustomToast);mToast.setView(_root);//设置自定义的view }mTvToast.setText(content);//设置文本mToast.show();//展示toast}public void showToast(Context ctx, int stringId) {showToast(ctx, ctx.getString(stringId));}public void cancelToast() {if (mToast != null) {mToast.cancel();mToast = null;mTvToast = null;}}}复制代码

####2.需要的一些资源文件 1)自定义样式的布局toast_custom_common,完全可以按照自己的需求进行布局,以下是案例中的布局

<LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:id="@+id/tvCustomToast"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/toast_custom_common_bg"android:gravity="center"android:minWidth="200dp"android:padding="15dp"android:textColor="@color/colorBasicWhite"android:textSize="17sp" /></LinearLayout>复制代码

2)资源文件

<color name="colorBasicWhite">#ffffff</color><color name="colorAutoDismissToast">#88000000</color>复制代码

//@drawable/toast_custom_common_bg<shape xmlns:android="/apk/res/android"><corners android:radius="10dp" /><solid android:color="@color/colorAutoDismissToast" /></shape>复制代码

####3.在你对应的页面中直接使用toast即可

public class TestCustomToastActivity extends AppCompatActivity {private int count = 0;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test_custom_toast);ButterKnife.bind(this);}@OnClick({R.id.btnShowToast,R.id.btnCancelToast})public void clickEvent(View v){switch (v.getId()){case R.id.btnShowToast:count++;CustomToast.INSTANCE.showToast(this,getString(R.string.custom_toast_click_number,count));break;case R.id.btnCancelToast:count = 0;CustomToast.INSTANCE.cancelToast();//可手动取消toast break;}}@Overrideprotected void onDestroy() {super.onDestroy();CustomToast.INSTANCE.cancelToast();//销毁页面时,取消掉toast}}复制代码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。