使用共享首选项以编程方式使 LinearLayout 在 android studio 中可关闭

Programatically make LinearLayout dismissible in android studio using shared preference

有一个我想实现的东西,我已经搜索了所有关于SO的问题,没有与此相关的答案,所以我想没有人问过这让我很好奇。

在我的 XML, Android studio 应用程序中,我添加了一个线性布局,在线性布局下,我添加了一个《TextView with text "Dismiss"》。

我想为此文本视图设置一个 onclick 侦听器,一旦用户单击带有文本“关闭”的此文本视图,我不希望该用户在重新安装应用程序之前再次在页面上看到该线性布局。

从逻辑上讲,线性布局就像一个通知,当用户到达该页面时突出显示我的应用程序中的某些内容,但我希望用户能够关闭它,而不是永远留在那里,这表明他们已经收到通知了。

我的作品:

  1. 因为我希望每个应用程序用户在单击关闭后决定不再看到该文本,所以我需要在带有文本“关闭”的 TextView 上使用共享首选项,所以每当应用程序获得此共享首选项的值时,它就会将隐藏该布局。
  2. 如果存储在应用程序中时发现来自共享首选项的值,我可以将 LinearLayout 设置为不可见
  3. 现在的问题是,如果单击带有文本“关闭”的 TextView,我将如何设置此共享首选项以及我将使用哪些代码使布局“GONE”或“INVISIBLE”?

非常感谢您对此的明智解决方案。

检查一下,它在 Java 中,这将在单击 dismisstextview 后隐藏布局,当您重新打开它时,警报仍将隐藏。

public class MainActivity extends AppCompatActivity {

    SharedPreferences sharedPref;
    SharedPreferences.Editor editor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sharedPref = getSharedPreferences(getApplicationContext().getPackageName(),0);
        editor = sharedPref.edit();

        LinearLayout alertLayout = (LinearLayout)findViewById(R.id.alertLayout);
        TextView textViewDismiss = (TextView)findViewById(R.id.textViewDismiss);

        if(sharedPref.getBoolean("isLayoutAlertShown",false)){
            alertLayout.setVisibility(View.GONE);
        }else{
            alertLayout.setVisibility(View.VISIBLE);
        }

        textViewDismiss.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                alertLayout.setVisibility(View.GONE);
                editor.putBoolean("isLayoutAlertShown",true);
                editor.apply();
            }
        });

    }
}

我建议您使用SharedPreferences,因为这与设置有关。你可以参考这个link:https://developer.android.com/training/data-storage/shared-preferences#java

您必须在 onCreate 调用此方法。所以它会检查是否有 showLayout 说明 truefalse,然后它会更新设计。

//Inside onCreate
private void initSharedPreference(final Activity activity, final LinearLayout linearLayout) {
    final SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);
    if (sharedPref.getBoolean("showLayout", false)) {
        linearLayout.setVisibility(View.GONE);
    } else {
        linearLayout.setVisibility(View.VISIBLE);
    }
}

setOnClickListener你需要实现这个方法。

//At the button
private void setSharedPrefShowLayout(final Activity activity, final Boolean isVisible) {
    final SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);
    final SharedPreferences.Editor editor = sharedPref.edit();
    editor.putBoolean("showLayout", isVisible);
    editor.apply();
}