152 lines
4.7 KiB
Plaintext
152 lines
4.7 KiB
Plaintext
# 安全提醒弹框功能实现
|
||
|
||
## 功能概述
|
||
实现了一个用户登录后只弹一次的安全提醒弹框,除非用户退出登录再次登录时才会重新弹出。
|
||
|
||
## 实现文件
|
||
|
||
### 1. 核心组件
|
||
- **SafetyReminderDialog.java**: 安全提醒弹框的主要逻辑类
|
||
- **dialog_safety_reminder.xml**: 弹框布局文件
|
||
- **dialog_safety_reminder_background.xml**: 弹框背景样式
|
||
- **btn_safety_reminder_confirm.xml**: 确认按钮样式
|
||
|
||
### 2. 样式和动画
|
||
- **styles.xml**: 弹框样式定义
|
||
- **dialog_safety_reminder_enter.xml**: 弹框进入动画
|
||
- **dialog_safety_reminder_exit.xml**: 弹框退出动画
|
||
|
||
### 3. 集成点
|
||
- **MainActivity.java**: 在用户登录后显示弹框
|
||
- **SettingActivity.java**: 在用户退出登录时清除显示状态
|
||
|
||
## 功能特性
|
||
|
||
### 1. 显示逻辑
|
||
- 用户登录后自动检查是否已显示过提醒
|
||
- 如果未显示过,则弹出安全提醒弹框
|
||
- 用户确认后标记为已显示,下次登录不再弹出
|
||
|
||
### 2. 重置逻辑
|
||
- 用户退出登录时清除显示状态
|
||
- 下次登录时会重新显示提醒弹框
|
||
|
||
### 3. 用户体验
|
||
- 弹框不可取消,用户必须做出选择
|
||
- 需要勾选确认框才能关闭弹框
|
||
- 橙色渐变背景,符合UI设计规范
|
||
- 大喇叭图标和标题下划线装饰
|
||
- 包含进入和退出动画效果
|
||
|
||
## 技术实现
|
||
|
||
### 1. 状态管理
|
||
```java
|
||
// 检查是否已显示过提醒
|
||
public static boolean hasShown(Context context) {
|
||
SharedPreferences sp = context.getSharedPreferences(Constants.SP_CONFIG_FILE_NAME, Context.MODE_PRIVATE);
|
||
return sp.getBoolean(PREF_SAFETY_REMINDER_SHOWN, false);
|
||
}
|
||
|
||
// 标记提醒已显示
|
||
private void markAsShown() {
|
||
SharedPreferences sp = context.getSharedPreferences(Constants.SP_CONFIG_FILE_NAME, Context.MODE_PRIVATE);
|
||
sp.edit().putBoolean(PREF_SAFETY_REMINDER_SHOWN, true).apply();
|
||
}
|
||
|
||
// 清除提醒显示状态
|
||
public static void clearShownStatus(Context context) {
|
||
SharedPreferences sp = context.getSharedPreferences(Constants.SP_CONFIG_FILE_NAME, Context.MODE_PRIVATE);
|
||
sp.edit().remove(PREF_SAFETY_REMINDER_SHOWN).apply();
|
||
}
|
||
```
|
||
|
||
### 2. 显示逻辑
|
||
```java
|
||
// 在MainActivity中显示弹框
|
||
private void showSafetyReminderDialog() {
|
||
if (!SafetyReminderDialog.hasShown(this)) {
|
||
SafetyReminderDialog dialog = new SafetyReminderDialog(this, new SafetyReminderDialog.OnSafetyReminderListener() {
|
||
@Override
|
||
public void onConfirm() {
|
||
Log.d("MainActivity", "用户确认安全提醒");
|
||
}
|
||
});
|
||
dialog.show();
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. 重置逻辑
|
||
```java
|
||
// 在SettingActivity退出登录时清除状态
|
||
void exit() {
|
||
// ... 其他退出逻辑 ...
|
||
|
||
// 清除安全提醒显示状态,下次登录时会再次显示
|
||
SafetyReminderDialog.clearShownStatus(this);
|
||
|
||
// ... 跳转到启动页 ...
|
||
}
|
||
```
|
||
|
||
## 使用说明
|
||
|
||
### 1. 样式设计
|
||
- 橙色渐变背景,符合UI设计规范
|
||
- 大喇叭图标装饰,增强视觉效果
|
||
- 标题下划线装饰,突出重要信息
|
||
- 橙色渐变按钮,保持视觉一致性
|
||
|
||
### 2. 自定义内容
|
||
- 可以在 `dialog_safety_reminder.xml` 中修改提醒文字内容
|
||
- 可以在 `SafetyReminderDialog.java` 中修改确认逻辑
|
||
|
||
### 3. 样式调整
|
||
- 可以在 `dialog_safety_reminder_background.xml` 中调整弹框背景渐变
|
||
- 可以在 `btn_safety_reminder_confirm.xml` 中调整按钮样式
|
||
- 可以在 `ic_megaphone.xml` 中调整大喇叭图标
|
||
- 可以在 `title_underline.xml` 中调整标题下划线样式
|
||
- 可以在 `styles.xml` 中调整弹框整体样式
|
||
|
||
## 测试验证
|
||
|
||
### 1. 首次登录测试
|
||
1. 清除应用数据
|
||
2. 重新登录应用
|
||
3. 验证安全提醒弹框是否显示
|
||
|
||
### 2. 重复登录测试
|
||
1. 确认安全提醒弹框后退出应用
|
||
2. 重新进入应用
|
||
3. 验证安全提醒弹框不再显示
|
||
|
||
### 3. 退出登录测试
|
||
1. 在设置中退出登录
|
||
2. 重新登录应用
|
||
3. 验证安全提醒弹框重新显示
|
||
|
||
## 注意事项
|
||
|
||
1. **样式一致性**: 确保弹框样式与UI设计规范保持一致
|
||
2. **权限检查**: 确保应用有读取本地存储的权限
|
||
3. **生命周期**: 弹框在MainActivity的afterViews方法中显示,确保在合适的时机显示
|
||
4. **状态同步**: 退出登录时正确清除显示状态,确保下次登录时能重新显示
|
||
5. **用户体验**: 确保用户必须勾选确认框才能关闭弹框,提升安全意识
|
||
|
||
## 扩展功能
|
||
|
||
### 1. 多语言支持
|
||
- 可以在不同语言的strings.xml中定义提醒文字
|
||
- 支持国际化显示
|
||
|
||
### 2. 自定义样式
|
||
- 可以添加更多样式选项
|
||
- 支持主题切换
|
||
|
||
### 3. 统计功能
|
||
- 可以添加用户确认统计
|
||
- 可以记录显示次数
|
||
|
||
这个安全提醒弹框功能已经完整实现,符合用户登录后只弹一次的需求,并且支持用户退出登录后重新显示。
|