如何实现TapTargetSequence仅在应用首次启动时展示?
实现方法
要让TapTargetSequence仅在用户首次使用时展示,核心是用SharedPreferences存储一个「是否已展示引导」的标记,具体实现如下:
1. 基础实现逻辑
在启动引导序列的代码前,先读取SharedPreferences中的标记,判断是否需要展示引导:
// 获取SharedPreferences实例,用自定义名称存储配置 SharedPreferences prefs = getSharedPreferences("AppGuidePrefs", MODE_PRIVATE); // 首次启动时标记不存在,默认返回true boolean isFirstLaunch = prefs.getBoolean("has_shown_guide", true); if (isFirstLaunch) { // 执行你原有的引导序列代码(已翻译中文文案) new TapTargetSequence(this) .targets( TapTarget.forView(findViewById(R.id.imgView1), "标题1", "这是图片1的点击说明").tintTarget(false) .outerCircleColor(R.color.dark_blue) .cancelable(true), TapTarget.forView(findViewById(R.id.imgView2), "标题2", "这是图片2的点击说明").tintTarget(false) .outerCircleColor(R.color.dark_blue) .cancelable(true), TapTarget.forView(findViewById(R.id.imgView3), "标题3", "这是图片3的点击说明").tintTarget(false) .outerCircleColor(R.color.dark_blue) .cancelable(true)) .start(); // 引导启动后,更新标记为false,下次启动不再展示 SharedPreferences.Editor editor = prefs.edit(); editor.putBoolean("has_shown_guide", false); editor.apply(); }
2. 可选:处理用户中途取消的情况
如果希望只有用户完整看完引导序列才标记为已展示,可以给序列添加监听:
if (isFirstLaunch) { new TapTargetSequence(this) .targets( TapTarget.forView(findViewById(R.id.imgView1), "标题1", "这是图片1的点击说明").tintTarget(false).outerCircleColor(R.color.dark_blue).cancelable(true), TapTarget.forView(findViewById(R.id.imgView2), "标题2", "这是图片2的点击说明").tintTarget(false).outerCircleColor(R.color.dark_blue).cancelable(true), TapTarget.forView(findViewById(R.id.imgView3), "标题3", "这是图片3的点击说明").tintTarget(false).outerCircleColor(R.color.dark_blue).cancelable(true)) .listener(new TapTargetSequence.Listener() { @Override public void onSequenceFinish() { // 引导完成后才标记为已展示 SharedPreferences.Editor editor = prefs.edit(); editor.putBoolean("has_shown_guide", false); editor.apply(); } @Override public void onSequenceCanceled(TapTarget lastTarget) { // 用户取消引导时,可选择不更新标记,下次启动重新展示 } }) .start(); }
注意事项
- 代码建议放在Activity的
onCreate方法中(确保界面控件初始化完成后执行);如果在Fragment中使用,将this替换为requireContext()。 - SharedPreferences的名称和标记键可根据自己的需求修改,只要保持统一即可。
内容的提问来源于stack exchange,提问作者سامي عبدالله علي المصباحي
相关产品推荐
相关产品推荐

