Android Studio中使用SharedPreference实现LinearLayout永久关闭功能
实现方案
步骤1:声明常量与控件
首先在对应的Activity/Fragment中定义存储相关常量和控件变量,避免硬编码:
Kotlin 版本
// SharedPreferences 存储配置 private val SP_FILE_NAME = "app_notice_config" private val KEY_NOTICE_CLOSED = "notice_has_closed" // 控件声明,使用视图绑定的话可以省略这部分 private lateinit var noticeLayout: LinearLayout private lateinit var dismissBtn: TextView
Java 版本
// SharedPreferences 存储配置 private static final String SP_FILE_NAME = "app_notice_config"; private static final String KEY_NOTICE_CLOSED = "notice_has_closed"; // 控件声明,使用视图绑定的话可以省略这部分 private LinearLayout noticeLayout; private TextView dismissBtn;
步骤2:初始化时读取存储状态,控制布局显隐
在页面生命周期初始化方法(Activity的onCreate、Fragment的onViewCreated)中执行以下逻辑:
Kotlin 版本
// 控件初始化,用视图绑定的话替换为对应绑定对象的属性 noticeLayout = findViewById(R.id.ll_notice) dismissBtn = findViewById(R.id.tv_dismiss) // 读取存储的关闭状态,默认值为false(未关闭) val sp = getSharedPreferences(SP_FILE_NAME, MODE_PRIVATE) val isNoticeClosed = sp.getBoolean(KEY_NOTICE_CLOSED, false) noticeLayout.visibility = if (isNoticeClosed) { View.GONE } else { View.VISIBLE }
Java 版本
// 控件初始化,用视图绑定的话替换为对应绑定对象的属性 noticeLayout = findViewById(R.id.ll_notice); dismissBtn = findViewById(R.id.tv_dismiss); // 读取存储的关闭状态,默认值为false(未关闭) SharedPreferences sp = getSharedPreferences(SP_FILE_NAME, MODE_PRIVATE); boolean isNoticeClosed = sp.getBoolean(KEY_NOTICE_CLOSED, false); if (isNoticeClosed) { noticeLayout.setVisibility(View.GONE); } else { noticeLayout.setVisibility(View.VISIBLE); }
步骤3:设置Dismiss点击事件
点击时存储关闭状态,同时立即隐藏布局:
Kotlin 版本
dismissBtn.setOnClickListener { // 写入关闭状态到SharedPreferences sp.edit() .putBoolean(KEY_NOTICE_CLOSED, true) .apply() // 立即隐藏公告布局 noticeLayout.visibility = View.GONE }
Java 版本
dismissBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 写入关闭状态到SharedPreferences SharedPreferences.Editor editor = sp.edit(); editor.putBoolean(KEY_NOTICE_CLOSED, true); editor.apply(); // 立即隐藏公告布局 noticeLayout.setVisibility(View.GONE); } });
注意事项
- 代码中用到的
R.id.ll_notice、R.id.tv_dismiss需要和你XML布局中声明的控件id对应,自行替换即可 - 写入存储时用
apply()是异步操作,不会阻塞主线程,若需要同步确认写入结果可以换成commit(),普通场景用apply()足够 - 布局隐藏用
GONE属性,隐藏后不会占用原有布局空间,比INVISIBLE更符合公告提示的交互逻辑 - SharedPreferences存储的数据会跟随应用卸载自动清除,刚好满足你“仅重装应用才会再次显示”的需求
内容的提问来源于stack exchange,提问作者Karmar
相关产品推荐
相关产品推荐

