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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 21:27:03