文章目录
-
- 一、启动页用在哪里?
- [二、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 怎么样?
-
问题:官方 Logo 长啥样?
-
答案:简单的图标,不要文字,透明背景,居中显示
-
说明:启动页只是告诉用户"App 正在启动",不是用来宣传品牌
-
问题:和我的品牌 Logo 有关系吗?
-
答案:有关系,但不用完全一样
-
说明:
- 可以只用品牌 Logo 的图形部分
- 工具类 App 可以用抽象符号
- 启动页 Logo ≠ 品牌 Logo
五、240dp / 160dp 是啥?是不是多层图片?
- 问题:示意图看不懂,好像是几层一样
- 答案:不是多层图片,也不用切多张图
- 说明 :
- 系统内部裁剪/缩放安全区的说明
- 开发者只需要提供一张图片就够
六、Logo 的显示大小有没有要求?
- 问题:一张大图片和一张小图片,显示效果一样吗?
- 答案:基本一样
- 说明 :
- 系统会统一缩放到固定 dp
- 像素大小不影响最终显示尺寸
七、为什么有的 Logo 看起来大,有的看起来小?
- 答案:主要看图片内部内容占比
- 说明 :
- 内容占画布 80% → 看起来偏大
- 内容占画布 50% → 看起来适中
- 和分辨率没关系
八、是否有最大显示限制?
- 问题:Logo 最大能显示多大?
- 答案:有上限,系统限制,不能突破
- 说明 :
- 系统有固定显示盒子
- 图片再大也会缩放进盒子
- 不能通过代码或更大图片突破
九、能不能让 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"
13.2 准备 Logo 图片
- 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 必须在用户同意隐私协议后初始化,否则存在合规风险