Setelan Aplikasi
Materi:
- Menentukan kontrol setelan yang sesuai
- Menyediakan navigasi untuk Setelan
- UI Setelan
- Menampilkan setelan
- Menyetel nilai-nilai default untuk setelan
- Membaca nilai-nilai setelan
- Mendengarkan perubahan setelan
- Menggunakan template Settings Activity
- Praktik terkait
Bab ini menjelaskan setelan aplikasi yang memungkinkan pengguna untuk menunjukkan preferensi mereka tentang bagaimana seharusnya aplikasi atau layanan berperilaku.
Menentukan kontrol setelan yang sesuai
Aplikasi sering kali menyertakan setelan yang memungkinkan pengguna memodifikasi fitur dan perilaku aplikasi. Misalnya, beberapa aplikasi memungkinkan pengguna menetapkan apakah notifikasi diaktifkan atau menetapkan seberapa sering aplikasi menyinkronkan data dengan awan.
Kontrol yang ada dalam setelan aplikasi seharusnya menangkap preferensi pengguna yang memengaruhi sebagian besar pengguna atau menyediakan dukungan penting bagi sebagian kecil pengguna. Misalnya, setelan notifikasi memengaruhi semua pengguna, sementara setelan mata uang untuk pasar asing menyediakan dukungan penting bagi pengguna dalam pasar itu.
Setelan biasanya tidak sering diakses, karena setelah pengguna mengubah setelan, mereka jarang kembali dan mengubahnya lagi. Jika kontrol atau preferensi yang Anda sediakan untuk pengguna adalah sesuatu yang perlu sering diakses, pertimbangkan untuk memindahkannya ke menu opsi bilah aplikasi, atau ke menu navigasi samping seperti panel samping navigasi.
Setel default untuk kontrol setelan Anda yang familier bagi pengguna dan perbaiki pengalaman aplikasi. Nilai default awal untuk setelan harus:
- Menyatakan nilai yang akan dipilih kebanyakan pengguna, seperti Semua kontak untuk "Kontak yang akan ditampilkan" dalam aplikasi Kontak.
- Menggunakan daya baterai lebih sedikit. Misalnya, dalam aplikasi Android Settings, Bluetooth dinonaktifkan hingga pengguna mengaktifkannya.
- Menimbulkan risiko terkecil untuk keamanan dan kehilangan data. Misalnya, setelan default untuk aksi default aplikasi Gmail adalah mengarsipkan, bukan menghapus.
- Melakukan interupsi bila penting saja. Misalnya, setelan default bila panggilan dan notifikasi masuk adalah hanya menyela bila penting.
Tip: Jika setelan berisi informasi tentang aplikasi, seperti nomor versi atau informasi lisensi, pindahkan setelan ini ke layar Bantuan yang diakses terpisah.
Menyediakan navigasi ke Setelan
Pengguna harus bisa masuk ke setelan aplikasi dengan mengetuk Settings di navigasi samping, misalnya panel samping navigasi, seperti yang ditampilkan yang di samping kiri gambar di bawah ini, atau di menu opsi di bilah aplikasi, seperti yang ditampilkan di sebelah kanan gambar di bawah ini.
Dalam gambar di atas:
- Setelan di navigasi samping (panel samping navigasi)
- Setelan di menu opsi bilah aplikasi
Ikuti panduan desain ini untuk mengarahkan ke setelan:
- Jika aplikasi Anda menawarkan navigasi samping seperti panel samping navigasi, sertakan Settingsdi bawah semua item lainnya (kecuali Help dan Send).
- Jika aplikasi Anda tidak menawarkan navigasi samping, tempatkan Settings dalam menu opsi bilah aplikasi di bawah semua item lainnya (kecuali Help dan Send feedback).Catatan: Gunakan kata Settings dalam navigasi aplikasi untuk mengakses setelan. Jangan gunakan sinonim seperti "Options" atau "Preferences".
Tip: Android Studio menyediakan pintasan untuk mempersiapkan menu opsi bersama Settings. Jika Anda memulai proyek Android Studio untuk ponsel cerdas atau tablet dengan menggunakan template Basic Activity, aplikasi baru akan menyertakan Settings seperti yang ditampilkan di bawah ini:
UI Setelan
Setelan seharusnya tesusun rapi, bisa diprediksi, dan berisi jumlah pilihan yang bisa dikelola. Pengguna harus bisa memahami dengan cepat semua setelan yang tersedia dan nilainya saat ini. Ikuti panduan desain ini:
- 7 setelan atau kurang: Susun setelan sesuai dengan prioritas, yang paling penting berada di bagian atas.
- 7-15 setelan: Kelompokkan setelan terkait di bawah pembatas bagian. Misalnya, dalam gambar di bawah, "Priority interruptions" dan "Downtime (priority interruptions only)" adalah pembatas bagian.
- 16 setelan atau lebih: Kelompokkan setelan terkait ke dalam sub-layar tersendiri. Gunakan judul, seperti Tampilan pada layar Setelan utama (seperti yang ditampilkan pada sisi kiri gambar di bawah) untuk memungkinkan pengguna mengarahkan ke setelan tampilan (ditampilkan pada sisi kanan gambar di bawah):
Membangun setelan
Bangun sebuah setelan aplikasi menggunakan beragam subkelas dari kelas Preference daripada menggunakan objek View. Kelas ini menyediakan Tampilan yang ditampilkan untuk setiap setelan, dan mengaitkannya dengan antarmuka SharedPreferences untuk menyimpan/mengambil data preferensi.
Setiap Preference muncul sebagai suatu item dalam daftar. Subkelas langsung menyediakan kontainer untuk layout yang melibatkan beberapa setelan. Misalnya:
- PreferenceGroup: Menyatakan sekelompok setelan (objek Preference).
- PreferenceCategory Menyediakan judul nonaktif di atas grup sebagai pembatas bagian
- PreferenceScreen Menyatakan Preference tingkat atas yang merupakan akar hierarki Preference. Gunakan PreferenceScreen dalam layout di bagian atas setiap layar setelan.
Misalnya, untuk menyediakan pembatas dengan judul di antara grup setelan (seperti yang ditampilkan dalam gambar sebelumnya untuk 7-15 setelan), tempatkan masing-masing grup objek Preference di dalam PreferenceCategory. Untuk menggunakan layar tersendiri bagi grup, tempatkan setiap grup Preference di dalam PreferenceScreen.
Subkelas Preference untuk setelan lainnya menyediakan UI yang sesuai bagi pengguna untuk mengubah setelan. Misalnya:
- CheckBoxPreference: Membuat item daftar yang menampilkan kotak centang untuk setelan yang diaktifkan atau dinonaktifkan. Nilai tersimpan adalah boolean (
true
jika dicentang). - ListPreference: Membuat item yang membuka dialog berisi daftar tombol radio.
- SwitchPreference: Membuat opsi dua keadaan yang bisa beralih (misalnya aktif/nonaktif atau true/false).
- EditTextPreference: Membuat item yang membuka dialog berisi widget EditText. Nilai tersimpan adalah String.
- RingtonePreference: Memungkinkan pengguna memilih nada dering yang tersedia pada perangkat.
Definisikan daftar setelan Anda dalam XML, dengan menyediakan struktur yang mudah dibaca dan mudah diperbarui. Setiap subkelas Preference bisa dideklarasikan bersama elemen XML yang cocok dengan nama kelas, misalnya
.Atribut XML untuk setelan
Contoh berikut dari template Settings Activity mendefinisikan sebuah layar dengan tiga setelan seperti yang ditampilkan dalam gambar di bawah ini: tombol beralih (di bagian atas layar pada sisi kiri), bidang entri teks (tengah), dan daftar tombol radio (kanan):
Akar hierarki setelan adalah layout
PreferenceScreen
:. . .
Di dalam setelan ini ada tiga setelan:
SwitchPreference
: Menampilkan tombol beralih untuk menonaktifkan atau mengaktifkan opsi.
Setelan ini memiliki atribut berikut:android:defaultValue
: Opsi telah diaktifkan (disetel ketrue
) secara default.android:summary
: Rangkuman teks muncul di bawah setelan. Untuk beberapa setelan, rangkuman tersebut akan berubah untuk menampilkan apakah opsi telah diaktifkan atau dinonaktifkan.android:title
: Judul setelan. UntukSwitchPreference
, judul muncul di sebelah kiri tombol beralih.- android:key: Kunci yang digunakan untuk menyimpan nilai setelan. Setiap setelan (objek Preference) memiliki pasangan nilai-kunci yang sesuai yang digunakan sistem untuk menyimpan setelan dalam file SharedPreferences default untuk setelan aplikasi Anda.android:defaultValue="true"android:key="example_switch"android:summary="@string/pref_description_social_recommendations"android:title="@string/pref_title_social_recommendations" />
EditTextPreference
: Menampilkan bidang teks tempat pengguna memasukkan teks.- Gunakan atribut EditText seperti
android:capitalize
danandroid:maxLines
untuk mendefinisikan penampilan bidang teks dan kontrol masukan. - Setelan default adalah sumber daya string
pref_default_display_name
.android:capitalize="words"android:defaultValue="@string/pref_default_display_name"android:inputType="textCapWords"android:selectAllOnFocus="true"android:key="example_text" android:maxLines="1"android:title="@string/pref_title_display_name" />android:singleLine="true"
- Gunakan atribut EditText seperti
ListPreference
: Menampilkan dialog dengan tombol radio agar pengguna membuat satu pilihan.- Nilai default-nya disetel ke
-1
untuk tanpa pilihan. - Teks untuk tombol radio (Always, When possible, dan Never) didefinisikan dalam larik
pref_example_list_titles
dan ditetapkan oleh atributandroid:entries
. - Nilai untuk pilihan tombol radio didefinisikan dalam larik
pref_example_list_values
dan ditetapkan oleh atributandroid:entryValues
. - Tombol radio ditampilkan dalam dialog, yang biasanya memiliki tombol positif (OK atau Accept) dan negatif (Cancel). Akan tetapi, dialog setelan tidak memerlukan tombol ini, karena pengguna bisa menyentuh bagian luar dialog untuk menghilangkannya. Untuk menyembunyikan tombol ini, setel atribut
android:positiveButtonText
danandroid:negativeButtonText
ke"@null"
.android:defaultValue="-1"android:entries="@array/pref_example_list_titles"android:entryValues="@array/pref_example_list_values"android:key="example_list"android:positiveButtonText="@null"android:negativeButtonText="@null"android:title="@string/pref_title_add_friends_to_messages" />
- Nilai default-nya disetel ke
Simpan file XML dalam direktori res/xml/. Walaupun bisa memberi nama file sesuka Anda, biasanya diberi nama preferences.xml.
Jika Anda menggunakan pustaka v7 appcompat dukungan dan memperluas Settings Activity dengan AppCompatActivity dan fragmen dengan PreferenceFragmentCompat, seperti yang ditampilkan di bagian berikutnya, ubah atribut XML setelan untuk menggunakan versi pustaka appcompat v7 dukungan. Misalnya, untuk setelan SwitchPreference, ubah
dalam kode menjadi:
Menampilkan setelan
- Untuk aplikasi yang mendukung Android 3.0 dan versi yang lebih baru, praktik terbaik untuk setelan adalah menggunakan Settings Activity dan fragmen untuk setiap file XML preferensi:
- Tambahkan kelas Settings Activity yang memperluas Activity dan menjadi host fragmen yang memperluas PreferenceFragment.
- Agar tetap kompatibel dengan pustaka appcompat v7, perluas Settings Activity dengan AppCompatActivity, perluas fragmen dengan PreferenceFragmentCompat.
- Jika aplikasi Anda mendukung versi Android yang lebih lama dari 3.0 (API level 10 dan yang lebih rendah), bangun aktivitas setelan khusus sebagai ekstensi kelas PreferenceActivity.
Fragmen seperti PreferenceFragment menyediakan arsitektur yang lebih fleksibel untuk aplikasi Anda, dibandingkan menggunakan aktivitas saja. Fragmen mirip dengan bagian modular sebuah aktivitas—fragmen memiliki daur hidup sendiri dan menerima kejadian masukan sendiri, dan Anda bisa menambahkan atau membuang fragmen saat aktivitas sedang berjalan. Gunakan PreferenceFragment untuk mengontrol tampilan setelan Anda sebagai ganti PreferenceActivity bila memungkinkan.
Akan tetapi, untuk membuat layout dua-panel bagi layar besar bila Anda memiliki beberapa grup setelan, Anda bisa menggunakan aktivitas yang memperluas PreferenceActivity dan juga PreferenceFragment untuk menampilkan setiap daftar setelan. Anda akan melihat pola ini dengan template Settings Activity seperti yang nanti dijelaskan dalam bab ini di "Menggunakan template Settings Activity".
Contoh berikut menampilkan bagaimana agar tetap kompatibel dengan pustaka appcompat v7 dengan memperluas Settings Activity menggunakan AppCompatActivity, dan memperluas fragmen dengan PreferenceFragmentCompat. Untuk menggunakan pustaka ini dan versi
PreferenceFragmentCompat
dari PreferenceFragment, Anda juga harus menambahkan pustaka android.support:preference-v7 ke bagian dependencies
file build.gradle (Module: app):dependencies {...
compile 'com.android.support:preference-v7:25.0.1'}
Anda juga perlu menambahkan deklarasi
preferenceTheme
berikut ke AppTheme
dalam file styles.xml:...
- @style/PreferenceThemeOverlay
Menggunakan PreferenceFragment
Yang berikut ini menampilkan cara menggunakan PreferenceFragment untuk menampilkan daftar setelan, dan cara menambahkan PreferenceFragment ke sebuah aktivitas untuk setelan. Agar tetap kompatibel dengan pustaka appcompat v7, perluas Settings Activity menggunakan AppCompatActivity, dan perluas fragmen menggunakan PreferenceFragmentCompat untuk setiap file XML preferensi.
Ganti metode
onCreate()
yang secara otomatis dihasilkan dengan metode onCreatePreferences() untuk memuat file preferensi dengan setPreferencesFromResource()
:public static class SettingsFragment extends PreferenceFragment {@Override
String rootKey) {public void onCreatePreferences(Bundle savedInstanceState,}setPreferencesFromResource(R.xml.preferences, rootKey);}
Seperti yang ditampilkan dalam kode di atas, Anda mengaitkan layout XML setelan dengan fragmen selama callback
onCreatePreferences()
dengan memanggil setPreferencesFromResource() dengan dua argumen:R.xml.
dan nama file XML (preferences
).- dalam hal ini
rootKey
mengidentifikasi akar preferensi dalamPreferenceScreen
.setPreferencesFromResource(R.xml.preferences, rootKey);
Anda kemudian bisa membuat Activity untuk setelan (bernama
SettingsActivity
) yang memperluas AppCompatActivity, dan menambahkan fragmen setelan:public class SettingsActivity extends AppCompatActivity {@Override
super.onCreate(savedInstanceState);protected void onCreate(Bundle savedInstanceState) {getSupportFragmentManager().beginTransaction()// Display the fragment as the main content.}.replace(android.R.id.content, new SettingsFragment()) .commit(); ...}
Kode di atas adalah pola umum yang digunakan untuk menambahkan fragmen ke sebuah aktivitas sehingga fragmen muncul sebagai materi utama aktivitas. Anda menggunakan:
getFragmentManager()
jika kelas memperluasActivity
dan fragmen memperluasPreferenceFragment
.getSupportFragmentManager()
jika kelas memperluasAppCompatActivity
dan fragmen memperluasPreferenceFragmentCompat
.
Untuk informasi selengkapnya tentang fragmen, lihat Fragmen.
Untuk mempersiapkan navigasi bagi aktivitas setelan, pastikan mendeklarasikan induk Settings Activity menjadi MainActivity dalam file AndroidManifest.xml.
Memanggil aktivitas setelan
Jika Anda mengimplementasikan menu opsi dengan item Settings, gunakan maksud berikut untuk memanggil Settings Activity dengan metode
onOptionsItemSelected()
bila pengguna mengetuk Settings(menggunakan action_settings
untuk ID sumber daya menu Settings):@Override
public boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == R.id.action_settings) {// ... Handle other options menu itemsstartActivity(intent);Intent intent = new Intent(this, SettingsActivity.class); return true; }}return super.onOptionsItemSelected(item);
Jika Anda mengimplementasikan panel samping navigasi dengan item Settings, gunakan maksud berikut memanggil Settings Activity dengan metode
onNavigationItemSelected()
bila pengguna mengetuk Settings (menggunakan action_settings
untuk ID sumber daya menu Settings):@Override
public boolean onNavigationItemSelected(MenuItem item) {int id = item.getItemId();Intent intent = new Intent(this, SettingsActivity.class);if (id == R.id.action_settings) { startActivity(intent);return true;} else if ... // ... Handle other navigation drawer items}
Menyetel nilai default untuk setelan
Jika pengguna mengubah setelan, sistem akan menyimpan perubahan ke file SharedPreferences.Seperti yang telah Anda pelajari dalam pelajaran lain, preferensi bersama memungkinkan Anda membaca dan menulis data primitif dalam jumlah kecil sebagai pasangan kunci/nilai ke file pada storage perangkat.
Aplikasi harus melakukan inisialisasi file SharedPreferences dengan nilai default untuk masing-masing setelan saat pengguna membuka aplikasi untuk pertama kali. Ikuti langkah-langkah ini:
- Pastikan untuk menetapkan nilai default untuk setiap setelan dalam file XML dengan menggunakan atribut
android:defaultValue
:...android:defaultValue="true"... />... - Dari metode onCreate() di aktivitas utama aplikasi—dan di aktivitas lainnya yang digunakan pengguna untuk memasuki aplikasi Anda untuk pertama kali—panggil setDefaultValues():...PreferenceManager.setDefaultValues(this,R.xml.preferences, false);...
Langkah 2 memastikan bahwa aplikasi diinisialisasi dengan benar menggunakan setelan default. Metode
setDefaultValues()
menggunakan tiga argumen:- Konteks aplikasi, seperti
this
. - ID sumber daya (
preferences
) untuk file XML layout setelan menyertakan nilai default yang disetel oleh Langkah 1 di atas. - Boolean yang menunjukkan apakah nilai default harus disetel lebih dari satu kali. Bila
false
, sistem akan menyetel nilai default hanya jika metode ini belum pernah dipanggil sebelumnya (atau KEY_HAS_SET_DEFAULT_VALUES dalam file SharedPreferences nilai default adalah false). Asalkan Anda menyetel argumen ketiga ini kefalse
, Anda bisa dengan aman memanggil metode ini setiap kali aktivitas dimulai tanpa menggantikan nilai setelan yang disimpan pengguna dengan menyetel ulang ke nilai defaultnya. Akan tetapi, jika Anda menyetelnya ketrue
, metode akan menggantikan nilai-nilai sebelumnya dengan default.
Membaca nilai setelan
Setiap Preference yang Anda tambahkan memiliki pasangan nilai-kunci yang digunakan sistem untuk menyimpan setelan dalam file SharedPreferences default untuk setelan aplikasi Anda. Bila pengguna mengubah setelan, sistem akan memperbarui nilai yang bersangkutan dalam file SharedPreferences untuk Anda. Satu-satunya saat Anda harus berinteraksi langsung dengan file SharedPreferences terkait adalah bila perlu membaca nilai untuk menentukan perilaku aplikasi berdasarkan setelan pengguna.
Semua preferensi aplikasi disimpan secara default ke file yang bisa diakses dari mana saja dalam aplikasi dengan memanggil metode statis PreferenceManager.getDefaultSharedPreferences(). Metode ini membutuhkan konteks dan mengembalikan objek SharedPreferences berisi semua pasangan nilai-kunci yang dikaitkan dengan objek Preference.
Misalnya, cuplikan kode berikut menampilkan membaca salah satu nilai preferensi dari metode
onCreate()
aktivitas utama:...
SharedPreferences sharedPref =PreferenceManager.getDefaultSharedPreferences(this);Boolean switchPref = sharedPref....getBoolean("example_switch", false);
Cuplikan kode di atas menggunakan
PreferenceManager.getDefaultSharedPreferences(this)
untuk mendapatkan setelan sebagai objek SharedPreferences (sharedPref
).
Kemudian menggunakan
getBoolean()
untuk mendapatkan nilai boolean preferensi yang menggunakan kunci "example_switch"
. Jika tidak ada nilai untuk kunci, metode getBoolean()
akan menyetel nilai ke false
.Mendengarkan perubahan setelan
Ada sejumlah alasan mengapa Anda ingin mempersiapkan listener untuk setelan tertentu:
- Jika perubahan nilai setelan juga memerlukan perubahan rangkuman setelan, Anda bisa mendengarkan perubahan, kemudian mengubah rangkuman dengan nilai setelan yang baru.
- Jika setelan memerlukan sejumlah opsi lagi, Anda bisa mendengarkan perubahan dan langsung merespons dengan menampilkan opsi.
- Jika setelan membuat setelan lain tidak terpakai atau tidak layak, Anda bisa mendengarkan perubahan dan langsung merespons dengan menonaktifkan setelan lainnya.
Untuk mendengarkan setelan, gunakan antarmuka Preference.OnPreferenceChangeListener, yang menyertakan metode onPreferenceChange() yang mengembalikan nilai setelan baru.
Dalam contoh berikut, listener mengambil nilai baru setelah setelan diubah, dan mengubah rangkuman setelan (yang muncul pada setelan di UI) untuk menampilkan nilai baru. Ikuti langkah-langkah ini:
- Gunakan file preferensi bersama, seperti yang dijelaskan dalam bab sebelumnya, untuk menyimpan nilai preferensi (setelan). Deklarasikan variabel-variabel berikut dalam definisi kelas SettingsFragment:public class SettingsFragment extends PreferenceFragment {
private SharedPreferences mPreferences;
private String sharedPrefFile = "com.example.android.settingstest";...} - Tambahkan yang berikut ini ke metode
onCreate()
pada SettingsFragment untuk mendapatkan preferensi yang didefinisikan oleh kunciexample_switch
, dan untuk menyetel teks awal (sumber daya stringoption_on
) untuk ringkasan:@Overridepublic void onCreate(Bundle savedInstanceState) {... mPreferences =.getSharedPreferences(sharedPrefFile, MODE_PRIVATE);this.getActivity()Preference preference = this.findPreference("example_switch");preference.setSummary(mPreferences.getString("summary",}getString(R.string.option_on)));... - Tambahkan kode berikut ke
onCreate()
setelah kode di langkah sebelumnya:...preference.setOnPreferenceChangeListener(newPreference.OnPreferenceChangeListener() {@OverrideObject newValue) {public boolean onPreferenceChange(Preference preference,preference.setSummary(R.string.option_on);if ((Boolean) newValue == true) { SharedPreferences.Editor preferencesEditor =preferencesEditor.putString("summary",mPreferences.edit(); getString(R.string.option_on)).apply(); } else {mPreferences.edit();preference.setSummary(R.string.option_off); SharedPreferences.Editor preferencesEditor = preferencesEditor.putString("summary",...getString(R.string.option_off)).apply(); } return true; }});Kode tersebut melakukan hal berikut:- Mendengarkan perubahan setelan switch dengan menggunakan onPreferenceChange(), dan mengembalikan
true
:@Overridepublic boolean onPreferenceChange(Preference preference,Object newValue) { ... return true;} - Menentukan nilai boolean baru (
newValue
) untuk setelan setelah perubahan (true
ataufalse
):if ((Boolean) newValue == true) {... } else { ...
} - Mengedit file Shared Preferences (seperti yang dijelaskan dalam praktik sebelumnya) menggunakan SharedPreferences.Editor:...preference.setSummary(R.string.option_on);SharedPreferences.Editor preferencesEditor =mPreferences.edit();...
- Memasukkan nilai baru sebagai string dalam rangkuman dengan menggunakan putString() dan menerapkan perubahan menggunakan apply():...preferencesEditor.putString("summary",getString(R.string.option_on)).apply();...
Menggunakan template Settings Activity
Jika Anda perlu membangun sejumlah sublayar setelan dan ingin memanfaatkan layar berukuran tablet, serta mempertahankan kompatibilitas dengan versi lama Android untuk tablet, Android Studio menyediakan sebuah pintasan: template Settings Activity.
Template Settings Activity telah terisi dengan setelan yang bisa Anda sesuaikan untuk aplikasi, dan menyediakan layout yang berbeda untuk ponsel cerdas dan tablet:
- Ponsel cerdas: Layar Settings utama dengan tautan header untuk setiap grup setelan, misalnya General untuk setelan umum, seperti yang ditampilkan di bawah ini.
- Tablet: Layout layar detail/master dengan tautan header untuk setiap grup di sebelah kiri (master), dan grup setelan di sebelah kanan (detail), seperti yang ditampilkan dalam gambar di bawah ini.
Template Settings Activity juga menyediakan fungsi untuk mendengarkan perubahan setelan dan mengubah rangkuman untuk merefleksikan perubahan setelan. Misalnya, jika Anda mengubah setelan "Add friends to messages" (opsinya adalah Always, When possible, atau Never), opsi yang dipilih akan muncul di rangkuman di bawah setelan:
Secara umum, Anda tidak perlu mengubah kode template Settings Activity untuk menyesuaikan aktivitas bagi setelan yang diinginkan di aplikasi. Anda bisa menyesuaikan judul, rangkuman, nilai yang memungkinkan, nilai default setelan tanpa mengubah kode template, dan bahkan menambahkan setelan lain ke grup yang disediakan. Untuk menyesuaikan setelan, edit sumber daya larik string dan string di file strings.xml dan atribut layout untuk setiap setelan dalam file di direktori xml.
Anda menggunakan kode template Settings Activity apa adanya. Agar berfungsi untuk aplikasi Anda, tambahkan kode ke Main Activity untuk menyetel nilai-nilai setelan default, dan untuk membaca serta menggunakan nilai setelan tersebut, seperti yang ditampilkan dalam bab ini nanti.
Menyertakan template Settings Activity dalam proyek Anda
Untuk menyertakan template Settings Activity dalam proyek aplikasi Anda di Android Studio, ikuti langkah-langkah ini:
- Pilih New > Activity > Settings Activity.
- Dalam dialog yang muncul, terima Activity Name (SettingsActivity adalah nama yang disarankan) dan Title (Settings).
- Klik tiga titik di ujung bidang Hierarchical Parent dan pilih aktivitas induk (biasanya MainActivity), sehingga navigasi Naik di Settings Activity akan mengembalikan pengguna ke MainActivity. Memilih aktivitas induk secara otomatis akan memperbarui file AndroidManifest.xml untuk mendukung navigasi Naik.
Template Settings Activity membuat file XML dalam direktori res > xml, tempat Anda bisa menambahkan atau menyesuaikan setelan yang diinginkan:
- pref_data_sync.xml: Layout PreferenceScreen untuk setelan "Data & Sync".
- pref_general.xml: Layout PreferenceScreen untuk setelan "General".
- pref_headers.xml: Layout header untuk layar utama Settings.
- pref_notification.xml: Layout PreferenceScreen untuk setelan "Notifications".Layout XML di atas menggunakan beragam subkelas dari kelas Preference, bukan objek View, dan subkelas langsung menyediakan kontainer untuk layout yang melibatkan beberapa setelan. Misalnya PreferenceScreen menyatakan Preference tingkat atas, yaitu akar hierarki Preference. File di atas menggunakan PreferenceScreen di bagian atas setiap layar setelan. Subkelas Preference untuk setelan lainnya menyediakan UI yang sesuai bagi pengguna untuk mengubah setelan. Misalnya:
- CheckBoxPreference: Kotak centang untuk setelan yang diaktifkan atau dinonaktifkan.
- ListPreference: Dialog yang berisi daftar tombol radio.
- SwitchPreference: Opsi untuk beralih dalam dua keadaan (misalnya aktif/nonaktif atau true/false).
- EditTextPreference: Dialog dengan sebuah widget EditText.
- RingtonePreference: Dialog dengan nada dering di perangkat.
Template Settings Activity juga menyediakan yang berikut ini:
- Sumber daya string di file strings.xml di direktori res > values yang bisa Anda sesuaikan untuk setelan yang diinginkan.Semua yang digunakan di Settings Activity, seperti judul untuk setelan, larik string untuk daftar, dan keterangan untuk setelan, didefinisikan sebagai sumber daya string di akhir file ini. String ini ditandai dengan komentar seperti
dan
.
Tip: Anda bisa mengedit string ini untuk menyesuaikan setelan yang diperlukan untuk aplikasi. - SettingsActivity dalam direktori java > com.example.android.projectname, yang bisa Anda gunakan apa adanya.Aktivitas yang menampilkan setelan.
SettingsActivity
memperluasAppCompatPreferenceActivity
untuk mempertahankan kompatibilitas dengan Android versi lama. - AppCompatPreferenceActivity di direktori java > com.example.android.projectname, yang bisa Anda gunakan apa adanya.Aktivitas ini adalah kelas helper yang digunakan oleh SettingsActivity untuk mempertahankan kompatibilitas mundur dengan Android versi sebelumnya.
Menggunakan header preferensi
Template Settings Activity menampilkan header preferensi pada layar utama yang memisahkan setelan ke dalam beberapa kategori (General, Notifications, dan Data & sync). Pengguna mengetuk heading untuk mengakses setelan yang ada pada heading itu. Pada tampilan tablet yang lebih besar (lihat gambar sebelumnya), header muncul di panel kiri dan setelan untuk setiap header muncul di panel kanan.
Untuk mengimplementasikan header, template menyediakan file pref_headers.xml:
android:icon="@drawable/ic_info_black_24dp" android:title="@string/pref_header_general" />
"com.example.android.droidcafe.SettingsActivity$GeneralPreferenceFragment"
"com.example.android.droidcafe.SettingsActivity$DataSyncPreferenceFragment"
android:title="@string/pref_header_notifications" />
android:title="@string/pref_header_data_sync" />
File header XML mendaftarkan setiap kategori preferensi dan mendeklarasikan fragmen yang berisi preferensi terkait.
Untuk menampilkan header, template menggunakan metode
onBuildHeaders()
berikut:@Override
@TargetApi(Build.VERSION_CODES.HONEYCOMB)public void onBuildHeaders(Listtarget) { loadHeadersFromResource(R.xml.pref_headers, target);}
Cuplikan kode di atas menggunakan metode
loadHeadersFromResource()
kelas PreferenceActivity untuk memuat header dari sumber daya XML (pref_headers.xml). Anotasi TargetApi memberi tahu alat (bantu) pemindai kode Lint di Android Studio bahwa kelas atau metode menargetkan API level tertentu yang ditetapkan sebagai SDK level minimal dalam manifes. Sebaliknya lint akan menghasilkan kesalahan dan peringatan saat menggunakan fungsionalitas baru yang tidak tersedia di API level target.Menggunakan PreferenceActivity bersama fragmen
Template Settings Activity menyediakan suatu aktivitas (SettingsActivity) yang memperluas PreferenceActivity untuk membuat layout dua-panel guna mendukung layar besar, juga menyertakan fragmen dalam aktivitas untuk menampilkan daftar setelan. Inilah pola yang berguna jika Anda memiliki beberapa grup setelan dan harus mendukung layar berukuran tablet serta ponsel cerdas.
Yang berikut ini menampilkan cara menggunakan aktivitas yang memperluas
PreferenceActivity
untuk menjadi host bagi satu atau beberapa fragmen (PreferenceFragment) yang menampilkan setelan aplikasi. Aktivitas bisa menjadi host beberapa fragmen, seperti GeneralPreferenceFragment
dan NotificationPreferenceFragment
, dan setiap definisi fragmen menggunakan addPreferencesFromResource
untuk memuat setelan dari file preferensi XML:public class SettingsActivity extends AppCompatPreferenceActivity {... public static class GeneralPreferenceFragment extends
@OverridePreferenceFragment { public void onCreate(Bundle savedInstanceState) {public static class NotificationPreferenceFragment extendssuper.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref_general); ... }}PreferenceFragment {...