You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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,提问作者سامي عبدالله علي المصباحي

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:01:01