Settings
Settings
Anda dapat mengatur kebutuhan aplikasi sesuai dengan kebutuhan pengguna.
Pengaturan ini akan disimpan dalam SharedPreferences
. Untuk memudahkan, anda
dapat menggunakan library androidx.preference
. Silahkan tambahkan library ke
dalam file build.gradle
(app).
implementation 'androidx.preference:preference:1.1.0'
Hirarki dan Widget
Untuk membangun pengaturan pada pengguna. Anda tinggal mendefinisikan sebuah
skema yang dibungkus dalam PreferenceScreeen
. Untuk mengelompokkan pengaturan
anda dapat menggunakan PreferenceCategory
. Selain itu dalam pengaturan juga
dikenal bermacam widget yang umum digunakan antara lain:
CheckBoxPreference
EditTextPreference
ListPreference
MultiSelectListPreference
SeekbarPreference
SwitchPreference
Penggunaan widget yang dibutuhkan, disesuaikan dengan jenis data yang akan disimpan.
Pembuatan Pengaturan
Untuk menampilkan pengaturan yang diinginkan, buatlah sebuah fragment yang
diturunkan dari class PreferenceFragmentCompat
. Dalam class tersebut, override
method onCreatePreferences
dan atur resource file xml yang dibutuhkan dengan
menggunakan method setPreferencesFromResource(R.xml.nama_pref, rootKey)
.
Langkah Percobaan
Pada aplikasi sebelumnya akan ditambahkan fitur untuk menyimpan username berdasarkan preferensi user pada halaman settings.
Tambahkan library preference yang dibutuhkan.
implementation 'androidx.preference:preference:1.1.0'
Untuk membuat halaman pengaturan dibutuhkan layout. Tambahkan file
preferences.xml
pada folderres/xml
. Isinya sebagai berikut:<?xml version="1.0" encoding="utf-8"?> <preferencescreen xmlns:app="http://schemas.android.com/apk/res-auto" > <checkboxpreference app:defaultvalue="false" app:key="key_keep_username" app:title="keep username" /> </preferencescreen>
Tambahkan class baru dengan nama
SettingsFragment
. Atur class ini sebagai turunan dariPreferenceFragmentCompat
.public class SettingsFragment extends PreferenceFragmentCompat { }
Catatan: Untuk API 29, penggunaan PreferenceActivity sudah deprecated.
Letakkan cursor anda pada definisi class dan tekan shortcut
Alt + Enter
. Pilih menu Implements methods.Pada method
onCreatePreferences()
atur tampilan layout berdasarkan resource xmlpreferences.xml
yang telah dibuat.@Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.preferences, rootKey); }
Buatlah activity baru, dan beri nama
SettingsActivity
. Activity ini akan digunakan untuk menampilkan Fragment yang telah dibuat.Bukalah file
activity_settings.xml
kemudian pindah ke mode design.Carilah komponen fragment kemudian drag ke dalam desain. Pilih fragment
SettingsFragment
.Atur fragment sehingga layout memenuhi layar desain.
Bukalah file
menu_main.xml
dan atur nilainya sehingga hasil akhirnya menjadi berikut.<menu 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" tools:context="com.dhanifudin.cashflow.MainActivity" > <item android:id="@+id/action_settings" android:orderInCategory="100" android:title="@string/action_settings" app:showAsAction="never" /> <item android:id="@+id/action_logout" android:orderInCategory="101" android:title="Logout" app:showAsAction="never" /> </menu>
Buka activity
MainActivity
kemudian implementasikan logika untuk menampilkanSettingsActivity
pada methodonOptionsItemSelected()
. Letakkan logika pada blokR.id.action_settings
.Intent intent = new Intent(this, SettingsActivity.class); startActivity(intent); return true;
Tambahkan logika untuk melakukan proses logout.
else if (id == R.id.action_logout) { session.logout(); Intent intent = new Intent(this, LoginActivity.class); startActivity(intent); finish(); return true; }
Buka kembali class
Session
. Dibutuhkan penambahan logika untuk mempermudah mengakses nilai preferensi pengguna. Tambahkan konstanta untuk key keep username.private static final String KEEP_USERNAME_KEY = "key_keep_username";
Tambahkan getter untuk keep username
public boolean isKeepUsername() { return preferences.getBoolean(KEEP_USERNAME_KEY, false); }
Buka kembali activity
LoginActivity
, tambahkan logika untuk menuliskan username ketika login berhasil.if (success) { if (session.isKeepUsername()) { session.setUsername(username); } // logika code yang lain... // ... }
Pada method
onCreate()
activityLoginActivity
tambahkan logika untuk mengatur nilai username jika opsi keep username dicentang.if (session.isKeepUsername()) { usernameInput.setText(session.getUsername()); }
Jalankan aplikasi serta uji apakah fitur sudah sesuai. Jangan lupa untuk melakukan commit dan push ke repository masing-masing.