9.2: Setelan Aplikasi

Materi:

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. Mengarahkan ke Setelan

Dalam gambar di atas:

  1. Setelan di navigasi samping (panel samping navigasi)
  2. 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 Settings di 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: Memulai dengan Template Basic Activity

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. Setelan Dikelompokkan oleh 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): Layar Setelan Utama dan Sub-Layar untuk Setelan Tampilan

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 <CheckBoxPreference>.

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): SwitchPreference di Atas (kiri)

Akar hierarki setelan adalah layout PreferenceScreen :

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
. . .
</PreferenceScreen>

Di dalam setelan ini ada tiga setelan:

  • SwitchPreference: Menampilkan tombol beralih untuk menonaktifkan atau mengaktifkan opsi. Setelan Tombol Beralih

    Setelan ini memiliki atribut berikut:

    • android:defaultValue: Opsi telah diaktifkan (disetel ke true) 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. Untuk SwitchPreference, 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.
      <SwitchPreference
           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. Setelan EditTextPreference
    • Gunakan atribut EditText seperti android:capitalize dan android:maxLines untuk mendefinisikan penampilan bidang teks dan kontrol masukan.
    • Setelan default adalah sumber daya string pref_default_display_name .
        <EditTextPreference
           android:capitalize="words"
           android:defaultValue="@string/pref_default_display_name"
           android:inputType="textCapWords"
           android:key="example_text"
           android:maxLines="1"
           android:selectAllOnFocus="true"
           android:singleLine="true"
           android:title="@string/pref_title_display_name" />
      
  • ListPreference: Menampilkan dialog dengan tombol radio agar pengguna membuat satu pilihan. Setelan ListPreference
    • 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 atribut android:entries .
    • Nilai untuk pilihan tombol radio didefinisikan dalam larik pref_example_list_values dan ditetapkan oleh atribut android: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 dan android:negativeButtonText ke "@null".
        <ListPreference
           android:defaultValue="-1"
           android:entries="@array/pref_example_list_titles"
           android:entryValues="@array/pref_example_list_values"
           android:key="example_list"
           android:negativeButtonText="@null"
           android:positiveButtonText="@null"
           android:title="@string/pref_title_add_friends_to_messages" />
      

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 <SwitchPreference dalam kode menjadi:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
   <android.support.v7.preference.SwitchPreferenceCompat
   ... />
</PreferenceScreen>

Menampilkan setelan

Gunakan subkelas Activity atau Fragment yang khusus untuk menampilkan daftar 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:
  • 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 name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   ...
   <item name="preferenceTheme">@style/PreferenceThemeOverlay</item> 
</style>

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
    public void onCreatePreferences(Bundle savedInstanceState,
                                                String rootKey) {
        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 dalam PreferenceScreen.
    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
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Display the fragment as the main content.
        getSupportFragmentManager().beginTransaction()
                .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 memperluas Activity dan fragmen memperluas PreferenceFragment.
  • getSupportFragmentManager() jika kelas memperluas AppCompatActivity dan fragmen memperluas PreferenceFragmentCompat.

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();
   // ... Handle other options menu items
   if (id == R.id.action_settings) {
      Intent intent = new Intent(this, SettingsActivity.class);
      startActivity(intent);
      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();
   if (id == R.id.action_settings) {
      Intent intent = new Intent(this, SettingsActivity.class);
      startActivity(intent);
   } else if ...
   // ... Handle other navigation drawer items
   return true;
}

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:

  1. Pastikan untuk menetapkan nilai default untuk setiap setelan dalam file XML dengan menggunakan atribut android:defaultValue :
    ...
    <SwitchPreference
             android:defaultValue="true"
             ... />
    ...
    
  2. 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 ke false, 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 ke true, 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:

  1. 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";
       ...
    }
    
  2. Tambahkan yang berikut ini ke metode onCreate() pada SettingsFragment untuk mendapatkan preferensi yang didefinisikan oleh kunci example_switch, dan untuk menyetel teks awal (sumber daya string option_on) untuk ringkasan:
    @Override
    public void onCreate(Bundle savedInstanceState) {
       ...
       mPreferences =
                this.getActivity()
                .getSharedPreferences(sharedPrefFile, MODE_PRIVATE);
       Preference preference = this.findPreference("example_switch");
       preference.setSummary(mPreferences.getString("summary",
                                     getString(R.string.option_on)));
       ...
    }
    
  3. Tambahkan kode berikut ke onCreate() setelah kode di langkah sebelumnya:

    ...
    preference.setOnPreferenceChangeListener(new
                               Preference.OnPreferenceChangeListener() {
       @Override
       public boolean onPreferenceChange(Preference preference,
                               Object newValue) {
          if ((Boolean) newValue == true) {
             preference.setSummary(R.string.option_on);
             SharedPreferences.Editor preferencesEditor =
                                              mPreferences.edit();
             preferencesEditor.putString("summary",
                               getString(R.string.option_on)).apply();
          } else {
             preference.setSummary(R.string.option_off);
             SharedPreferences.Editor preferencesEditor =
                                              mPreferences.edit();
             preferencesEditor.putString("summary",
                               getString(R.string.option_off)).apply();
          }
          return true;
       }
    });
    ...
    

    Kode tersebut melakukan hal berikut:

    1. Mendengarkan perubahan setelan switch dengan menggunakan onPreferenceChange(), dan mengembalikan true:

      @Override
      public boolean onPreferenceChange(Preference preference,
                         Object newValue) {
       ...
       return true;
      }
      
    2. Menentukan nilai boolean baru (newValue) untuk setelan setelah perubahan (true atau false):

      if ((Boolean) newValue == true) {
       ...
      } else {
       ...
      }
      
    3. Mengedit file Shared Preferences (seperti yang dijelaskan dalam praktik sebelumnya) menggunakan SharedPreferences.Editor:

      ...
      preference.setSummary(R.string.option_on);
      SharedPreferences.Editor preferencesEditor =
                                        mPreferences.edit();
      ...
      
    4. 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.

    Settings Activity: Layar Utama dan Setelan Umum di Ponsel Cerdas

  • 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. Settings Activity: Setelan Umum di Tablet

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: Perubahan Rangkuman Setelan dengan Nilai Baru

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:

  1. Pilih New > Activity > Settings Activity.
  2. Dalam dialog yang muncul, terima Activity Name (SettingsActivity adalah nama yang disarankan) dan Title (Settings).
  3. 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:

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 <!-- Strings related to Settings --> dan <!-- Example General settings -->.

    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 memperluas AppCompatPreferenceActivity 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:

<preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> 
  <header
      android:fragment=
           "com.example.android.droidcafe.SettingsActivity$GeneralPreferenceFragment"
      android:icon="@drawable/ic_info_black_24dp"
      android:title="@string/pref_header_general" />

  <header
      android:fragment=
      "com.example.android.droidcafe.SettingsActivity$NotificationPreferenceFragment"
      android:icon="@drawable/ic_notifications_black_24dp"
      android:title="@string/pref_header_notifications" />

  <header
      android:fragment=
          "com.example.android.droidcafe.SettingsActivity$DataSyncPreferenceFragment"
      android:icon="@drawable/ic_sync_black_24dp"
      android:title="@string/pref_header_data_sync" /> 
</preference-headers>

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(List<Header> target) {
        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
                                              PreferenceFragment {
   @Override
   public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.pref_general);

   ...
   }
   public static class NotificationPreferenceFragment extends
                                              PreferenceFragment {
   ...
}

Praktik terkait

Latihan terkait dan dokumentasi praktik ada di Dasar-Dasar Developer Android: Praktik.

Ketahui selengkapnya

results matching ""

    No results matching ""