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

Android开发:如何创建仅首次启动时显示的模态提示框?

实现方案

一、判断应用首次启动

通过SharedPreferences存储启动标记,判断是否为首次打开应用:

Kotlin 代码

val sharedPref = getSharedPreferences("AppPrefs", MODE_PRIVATE)
val isFirstLaunch = sharedPref.getBoolean("is_first_launch", true)

if (isFirstLaunch) {
    showWelcomeTip()
    sharedPref.edit().putBoolean("is_first_launch", false).apply()
}

Java 代码

SharedPreferences sharedPref = getSharedPreferences("AppPrefs", MODE_PRIVATE);
boolean isFirstLaunch = sharedPref.getBoolean("is_first_launch", true);

if (isFirstLaunch) {
    showWelcomeTip();
    sharedPref.edit().putBoolean("is_first_launch", false).apply();
}

二、实现自动消失的提示框(匹配目标样式)

从你提供的效果图来看,推荐用Snackbar(自带自动消失逻辑,可自定义样式);如果需要更复杂的布局,也可以用自定义Toast搭配Handler实现。

方案1:使用Snackbar实现

Snackbar默认支持自动消失,通过自定义样式可以匹配效果图的顶部浅色提示效果:

修改布局根为CoordinatorLayout

Snackbar依赖CoordinatorLayout实现位置调整,需要把你的ConstraintLayout嵌套在CoordinatorLayout内:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button
            android:id="@+id/clickBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#0F9D58"
            android:text="Click Me"
            android:textColor="#ffffff"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

编写Snackbar显示逻辑

Kotlin 代码

private fun showWelcomeTip() {
    val snackbar = Snackbar.make(findViewById(R.id.clickBtn), "Welcome to My App", Snackbar.LENGTH_LONG)
    // 设置提示框显示在顶部
    val snackView = snackbar.view
    val params = snackView.layoutParams as CoordinatorLayout.LayoutParams
    params.gravity = Gravity.TOP
    snackView.layoutParams = params
    // 自定义样式:浅色背景+深色文字
    snackView.setBackgroundColor(Color.parseColor("#F5F5F5"))
    snackbar.setTextColor(Color.parseColor("#333333"))
    // 显示提示框
    snackbar.show()
}

Java 代码

private void showWelcomeTip() {
    Snackbar snackbar = Snackbar.make(findViewById(R.id.clickBtn), "Welcome to My App", Snackbar.LENGTH_LONG);
    // 设置显示在顶部
    View snackView = snackbar.getView();
    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) snackView.getLayoutParams();
    params.gravity = Gravity.TOP;
    snackView.setLayoutParams(params);
    // 自定义样式
    snackView.setBackgroundColor(Color.parseColor("#F5F5F5"));
    snackbar.setTextColor(Color.parseColor("#333333"));
    snackbar.show();
}

Snackbar.LENGTH_LONG对应默认3秒左右自动消失,若需自定义时长,可替换为Snackbar.LENGTH_INDEFINITE,再搭配Handler手动控制消失:

// Kotlin 自定义5秒消失
val snackbar = Snackbar.make(findViewById(R.id.clickBtn), "Welcome to My App", Snackbar.LENGTH_INDEFINITE)
// ... 样式设置
snackbar.show()
Handler(Looper.getMainLooper()).postDelayed({
    snackbar.dismiss()
}, 5000)

方案2:自定义Toast+Handler(复杂布局场景)

如果需要添加图标等更复杂的布局,可创建自定义Toast布局,再用Handler控制自动消失:

1. 创建自定义提示框布局(res/layout/layout_welcome_tip.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#F5F5F5"
    android:padding="16dp"
    android:orientation="horizontal"
    android:gravity="center_vertical">

    <ImageView
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:src="@drawable/ic_baseline_info_24"
        android:layout_marginEnd="12dp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Welcome to My App"
        android:textColor="#333333"
        android:textSize="16sp"/>

</LinearLayout>

2. 编写显示逻辑

Kotlin 代码

private fun showWelcomeTip() {
    val tipView = LayoutInflater.from(this).inflate(R.layout.layout_welcome_tip, null)
    val toast = Toast(this).apply {
        view = tipView
        setGravity(Gravity.TOP, 0, 0)
        show()
    }
    // 3秒后自动消失
    Handler(Looper.getMainLooper()).postDelayed({
        toast.cancel()
    }, 3000)
}

Java 代码

private void showWelcomeTip() {
    View tipView = LayoutInflater.from(this).inflate(R.layout.layout_welcome_tip, null);
    Toast toast = new Toast(this);
    toast.setView(tipView);
    toast.setGravity(Gravity.TOP, 0, 0);
    toast.show();

    // 3秒后自动消失
    new Handler(Looper.getMainLooper()).postDelayed(toast::cancel, 3000);
}

内容的提问来源于stack exchange,提问作者user20376385

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:05:22