Android12 新启动页到底该怎么做

文章目录

    • 一、启动页用在哪里?
    • [二、Android 12 的启动页和以前有什么不同?](#二、Android 12 的启动页和以前有什么不同?)
    • [三、PNG 能不能作为启动 Logo?](#三、PNG 能不能作为启动 Logo?)
    • [四、官方推荐的启动 Logo 怎么样?](#四、官方推荐的启动 Logo 怎么样?)
    • [五、240dp / 160dp 是啥?是不是多层图片?](#五、240dp / 160dp 是啥?是不是多层图片?)
    • [六、Logo 的显示大小有没有要求?](#六、Logo 的显示大小有没有要求?)
    • [七、为什么有的 Logo 看起来大,有的看起来小?](#七、为什么有的 Logo 看起来大,有的看起来小?)
    • 八、是否有最大显示限制?
    • [九、能不能让 Logo 显示更大?](#九、能不能让 Logo 显示更大?)
    • 十、官方隐含的设计原则
    • [十一、最佳实践(拼图类 App 推荐方案)](#十一、最佳实践(拼图类 App 推荐方案))
    • 十二、一句话总结
    • 十三、启动页实现方法
      • [13.1 添加依赖](#13.1 添加依赖)
      • [13.2 准备 Logo 图片](#13.2 准备 Logo 图片)
      • [13.3 配置 Theme](#13.3 配置 Theme)
      • [13.4 在 Manifest 中绑定 Theme](#13.4 在 Manifest 中绑定 Theme)
      • [MainActivity 初始化代码(含隐私协议 & SDK 初始化)](#MainActivity 初始化代码(含隐私协议 & SDK 初始化))
      • [13.6 可选调试:保持 Splash 显示](#13.6 可选调试:保持 Splash 显示)
      • [13.7 注意事项](#13.7 注意事项)

一、启动页用在哪里?

  • 问题:启动页是不是直接在 MainActivity 用?
  • 答案:是的,入口 Activity(一般是 MainActivity)就行。
  • 说明
    • 不用也不建议单独建 SplashActivity
    • 系统会在 Activity 创建前自动显示启动页
    • Activity 本身不用管启动页 UI

二、Android 12 的启动页和以前有什么不同?

  • 问题:Android 12 启动页有什么变化?
  • 答案:由系统统一绘制,不再靠 App 自己写。
  • 说明
    • 可以消除白屏或黑屏
    • 启动体验更统一、更稳定
    • 不允许插广告或网络 Loading
    • 审核更容易通过

三、PNG 能不能作为启动 Logo?

  • 问题:Logo 是 PNG 可以吗?
  • 答案:可以,官方支持 PNG。
  • 说明
    • 必须正方形
    • 背景透明
    • 内容居中并留白
    • 不建议直接用 Launcher Icon

  • 问题:官方 Logo 长啥样?

  • 答案:简单的图标,不要文字,透明背景,居中显示

  • 说明:启动页只是告诉用户"App 正在启动",不是用来宣传品牌

  • 问题:和我的品牌 Logo 有关系吗?

  • 答案:有关系,但不用完全一样

  • 说明

    • 可以只用品牌 Logo 的图形部分
    • 工具类 App 可以用抽象符号
    • 启动页 Logo ≠ 品牌 Logo

五、240dp / 160dp 是啥?是不是多层图片?

  • 问题:示意图看不懂,好像是几层一样
  • 答案:不是多层图片,也不用切多张图
  • 说明
    • 系统内部裁剪/缩放安全区的说明
    • 开发者只需要提供一张图片就够

  • 问题:一张大图片和一张小图片,显示效果一样吗?
  • 答案:基本一样
  • 说明
    • 系统会统一缩放到固定 dp
    • 像素大小不影响最终显示尺寸

  • 答案:主要看图片内部内容占比
  • 说明
    • 内容占画布 80% → 看起来偏大
    • 内容占画布 50% → 看起来适中
    • 和分辨率没关系

八、是否有最大显示限制?

  • 问题:Logo 最大能显示多大?
  • 答案:有上限,系统限制,不能突破
  • 说明
    • 系统有固定显示盒子
    • 图片再大也会缩放进盒子
    • 不能通过代码或更大图片突破

  • 答案:不能
  • 说明
    • 图片变大没用
    • 动画也没用
    • 代码控制也不行
    • 这是系统设计的规则

十、官方隐含的设计原则

  • 启动页越简单越好
  • 不承载任何信息
  • 不强化品牌
  • 不拖慢启动
  • 不引导用户操作

十一、最佳实践(拼图类 App 推荐方案)

  • 使用 Android 12 官方 Splash Screen
  • MainActivity 作为入口 Activity
  • Logo:
    • 抽象符号
    • 无文字
    • 透明 PNG
    • 内容占画布 50%~60%
  • 背景色通过 Theme 配置
  • Splash 结束后显示隐私协议或服务协议弹窗

十二、一句话总结

  • 系统负责绘制启动页
  • 显示大小由系统决定
  • 只要保证 Logo 简单、居中、有留白
  • 简单就是正确

十三、启动页实现方法

13.1 添加依赖

gradle 复制代码
implementation "androidx.core:core-splashscreen:1.0.1"
  • PNG / VectorDrawable 格式
  • 尺寸建议 512×512
  • 背景透明
  • 内容居中,留白约 33%
  • 内容占比 50%~66%,避免被裁剪

13.3 配置 Theme

xml 复制代码
<style name="Theme.App.Splash" parent="Theme.SplashScreen">
    <item name="windowSplashScreenBackground">#FFFFFF</item>
    <item name="windowSplashScreenAnimatedIcon">@drawable/ic_splash_logo</item>
    <item name="postSplashScreenTheme">@style/Theme.App</item>
</style>

13.4 在 Manifest 中绑定 Theme

xml 复制代码
<activity
    android:name=".MainActivity"
    android:theme="@style/Theme.App.Splash"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

MainActivity 初始化代码(含隐私协议 & SDK 初始化)

kotlin 复制代码
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        // 安装 Splash Screen(必须在 super.onCreate 之前)
        installSplashScreen()
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 检查用户是否已经同意隐私协议
        val prefs = getSharedPreferences("app_prefs", Context.MODE_PRIVATE)
        val isAgreed = prefs.getBoolean("isAgreedPrivacy", false)

        if (!isAgreed) {
            // 用户没同意,弹出隐私协议
            showPrivacyDialog(prefs)
        } else {
            // 用户已同意,初始化 SDK
            initSdk()
        }
    }

    // 弹出隐私协议 & 服务协议
    private fun showPrivacyDialog(prefs: SharedPreferences) {
        AlertDialog.Builder(this)
            .setTitle("隐私协议 & 服务协议")
            .setMessage("请先阅读并同意隐私协议和服务协议才能使用 App。")
            .setCancelable(false)
            .setPositiveButton("同意") { dialog, _ ->
                // 用户同意,保存标记
                prefs.edit().putBoolean("isAgreedPrivacy", true).apply()
                dialog.dismiss()
                // 同意后初始化 SDK
                initSdk()
            }
            .setNegativeButton("拒绝") { dialog, _ ->
                // 用户拒绝,直接退出 App
                dialog.dismiss()
                finish()
            }
            .show()
    }

    // SDK 初始化
    private fun initSdk() {
        // 在这里初始化所有第三方 SDK
        SomeSDK.init(this, "API_KEY")
    }
}

13.6 可选调试:保持 Splash 显示

xml 复制代码
installSplashScreen().setKeepOnScreenCondition { true }

仅用于调试,正式版本必须移除

13.7 注意事项

  • 不延长 Splash 显示时间
  • 不插入广告或网络 Loading
  • 保证 Logo 内容在安全区域内(内容占比 50%~66%)
  • 四周留白,避免被裁剪
  • 背景色通过 Theme 控制,不要在图片里加背景
  • SDK 必须在用户同意隐私协议后初始化,否则存在合规风险
相关推荐
aaajj3 小时前
【Android】关于MY_PACKAGE_REPLACED广播
android
4Forsee4 小时前
【Android】动态操作 Window 的背后机制
android·java·前端
华锋20224 小时前
2025.12首次体验 arkui-x 跨平台开发库
android
allk555 小时前
Android 性能优化之启动加速:从底层原理到架构治理
android
QuantumLeap丶5 小时前
《Flutter全栈开发实战指南:从零到高级》- 24 -集成推送通知
android·flutter·ios
用户41659673693556 小时前
WebView 滚动失灵?剖析 `scrollBy()` 在现代 Web 布局中的失效陷阱
android
明川6 小时前
Android Gradle学习 - Gradle插件开发与发布指南
android·前端·gradle
二流小码农7 小时前
鸿蒙开发:上架困难?谈谈我的上架之路
android·ios·harmonyos