スマホ内に保存できるデータの種類として
・プリファレンス
・内部ストレージ
・データベース
ときて、残りは
・アプリ用の設定
この4種類でスマホ内に保存できる方法は全部(のはず)
1. ユーザー設定画面の呼び出し
AppCompatActivityのクラスの onCreate()から
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_user_seting)
// ユーザー設定を呼び出し
val tsp = user_parameters()
fragmentManager.beginTransaction()
.replace(R.id.fragment_container, tsp )
.commit()
}
2. ユーザー設定画面の側
PreferenceFragment を使って行うパターン
バーも表示して他の画面と見た目を揃えたかったので
xmlに Toolbar と FrameLayout を配置したものを用意
activity_user_seting.xml
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/set_toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="?attr/colorPrimary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- 設定項目 : 表示する位置のみ、実際の内容は別に記載 -->
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/set_toolbar"
app:layout_constraintTop_toBottomOf="@+id/set_toolbar" />
</android.support.constraint.ConstraintLayout>
3. 処理
実際の処理は user_parameters で行う
Preference は
PreferenceActivity ではなく PreferenceFragment が推奨
PreferenceFragmentCompat は SupportLibrary v23から無くなった
class user_parameters : PreferenceFragment() {
//
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 表示情報を追加
addPreferencesFromResource(R.xml.parameters_seting)
// 今のデータを呼び出して表示(サマリー)
val switch = findPreference(getString(R.string.parameter_key_switch)) as SwitchPreference
switch.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { preference, value ->
// 変更された場合は、表示を更新
preference.summary = value.toString()
// 値により、設定できる項目を変更
val otherSettingsPreference = findPreference(getString(R.string.parameter_gr_setint2))
otherSettingsPreference.isEnabled = value as Boolean
true
}
switch.summary=switch.isChecked.toString()
//
val checkbox = findPreference(getString(R.string.parameter_key_checkbox)) as CheckBoxPreference
checkbox.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { preference, value ->
preference.summary = value.toString()
// 値により、設定できる項目を変更
val otherSettingsPreference = findPreference(getString(R.string.parameter_gr_setint3))
otherSettingsPreference.isEnabled = value as Boolean
true
}
checkbox.summary=checkbox.isChecked.toString()
// テキストが変更されたらサマリも更新する
val text = findPreference(getString(R.string.parameter_key_text)) as EditTextPreference
text.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { preference, value ->
preference.summary = value as CharSequence
true
}
text.summary = text.text
//
val number = findPreference(getString(R.string.parameter_key_number)) as EditTextPreference
number.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { preference, value ->
preference.summary = value as CharSequence
true
}
number.summary = number.text
val listSel = findPreference(getString(R.string.parameter_key_list)) as ListPreference
listSel.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { preference, value ->
preference.summary = value as CharSequence
true
}
listSel.summary = listSel.value
findPreference(getString(R.string.parameter_gr_setint2)).isEnabled = switch.isChecked
findPreference(getString(R.string.parameter_gr_setint3)).isEnabled = checkbox.isChecked
}
}
4. 実際の設定項目の画面
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/parameter_intfo_gr_onof">
<SwitchPreference
android:key="@string/parameter_key_switch"
android:title="@string/parameter_info_switch"
android:defaultValue="false" />
<CheckBoxPreference
android:key="@string/parameter_key_checkbox"
android:title="@string/parameter_info_chkbox"
android:defaultValue="false" />
</PreferenceCategory>
<PreferenceCategory
android:key="@string/parameter_gr_setint2"
android:title="@string/parameter_info_gr_text"
android:enabled="false" >
<EditTextPreference
android:key="@string/parameter_key_text"
android:title="@string/parameter_info_text"
android:text ="@string/parameter_info_text"
/>
<EditTextPreference
android:key="@string/parameter_key_number"
android:title="@string/parameter_info_text"
android:text="0"
android:inputType="number"
android:maxLength="3" />
</PreferenceCategory>
<PreferenceCategory
android:key="@string/parameter_gr_setint3"
android:title="@string/parameter_info_gr_sel"
android:enabled="false" >
<ListPreference
android:key="@string/parameter_key_list"
android:title="@string/parameter_info_list"
android:entries="@array/week_entries"
android:entryValues="@array/week_values"
android:defaultValue="@string/Sun" />
<MultiSelectListPreference
android:key="@string/parameter_key_multi"
android:title="@string/parameter_info_multi"
android:entries="@array/planet_entries"
android:entryValues="@array/planet_values" />
</PreferenceCategory>
</PreferenceScreen>