Android での SettingsActivity (PreferenceFragmentCompat) の簡単な使用法

単純な APP 設定が必要な場合は、sharedPreferences をストレージに使用できます。AndroidStudio を使用して、設定用の Activity をすばやく作成できます。実際、PreferenceFragmentCompat を継承し、ストレージ メソッドはsharedPreferences を使用するため、多くの操作が節約されます。
 

1. 新しいSettingsActivityを作成します

AS を使用して新しい設定アクティビティを作成する

 アクティビティ、レイアウト、XML ファイルが自動的に生成されることがわかります。

 レイアウト ファイルは非常にシンプルです。FrameLayout 内の LinearLayout です。変更する必要はありません。xml
ファイルは PreferenceScreen レイアウト ファイルを使用します。自動生成された Activity ファイル内の SettingsFragment クラスは、xml を参照します。

2. デフォルトで生成される XML は
root_preferences.xml で、これには PreferenceScreen レイアウトが含まれています。PreferenceScreen のレイアウトをオンラインで検索するか、公式 Web サイトにアクセスして手順を読むことができます。ここでは簡単な例を示しているだけです。

title: 表示されるタイトル
key: 保存されたキー (sharedPreferences の値を取得するために必要)
dependency: 特定のコンポーネントに依存するかどうか 依存コンポーネントが有効な場合、現在のコンポーネントが有効になります icon
: アイコン
の概要: 説明
フラグメント: ネストされていますフラグメント (複数レベルのページ)
useSimplesummaryProvider : 値の内容を表示するかどうか

 

3.活動監視の検証

設定を変更して保存する場合は、入力値の正当性の検証など、変更を監視するために Preference.OnPreferenceChangeListener を実装する必要があります。


 

public class SettingsActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings_activity);
        if (savedInstanceState == null) {
            getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.settings, new SettingsFragment())
                    .commit();
        }
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setTitle("设置");
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
    }


    // 点击返回图标事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            this.finish();
        }
        return super.onOptionsItemSelected(item);
    }

	// 接口Preference.OnPreferenceChangeListener
    public static class SettingsFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener {
        @Override
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
            setPreferencesFromResource(R.xml.root_preferences, rootKey);
            // 通过xml设置的key找到要监听的项
            Preference sPEditUsername = findPreference("username");
            Preference sPEditPassword = findPreference("password");
            // 设置监听
            if (sPEditUsername != null) {
                sPEditUsername.setOnPreferenceChangeListener(this);
            }
            if (sPEditPassword != null) {
                sPEditPassword.setOnPreferenceChangeListener(this);
            }

        }
		// 值发生改变时触发,return值决定是否保存修改,true保存,false不保存
        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            String key = preference.getKey();
            if (key.equals("username")) {
                ...
                return true;  // 保存
            } else if (key.equals("password")) {
                ...
                return true;
            }
            return false;  //不保存
        }
}

 sharedPreferences の保存方法が使用されるため、値は依然として非常に単純です。

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean spIsAuth = sharedPreferences.getBoolean("is_auth", false);  // 第一个参数是key,第二个是根据key取不到值时的默认值
String spUsername = sharedPreferences.getString("username", "");
String spPassword = sharedPreferences.getString("password", "");

おすすめ

転載: blog.csdn.net/s_nshine/article/details/132545508