• Uncategorized
  • 0

9.2: Adding Settings to an App

Task 1: Add a switch setting to an app

Dalam tugas ini, Anda akan:

  • Membuat proyek baru berdasarkan template Basic Activity (yang menyediakan menu opsi).
  • Menambahkan setelan tombol alih dengan atribut di file XML preferensi.
  • Menambahkan aktivitas untuk setelan dan fragmen untuk setelan khusus. akan menggunakan versi PreferenceFragmentCompatPreferenceFragment untuk mempertahankan kompatibilitas dengan AppCompatActivity. Anda juga akan menambahkan pustaka android.support:preference-v7.
  • Menghubungkan item Settings di menu opsi ke aktivitas setelan.

1.1 Create the project and add the xml directory and resource file

  1. Di Android Studio, buatlah proyek baru dengan parameter berikut:

    Atribut

    Nilai

    Application Name

    AppWithSettings

    Company Name

    android.example.com (atau domain Anda sendiri)

    Phone and Tablet Minimum SDK

    API15: Android 4.0.3 IceCreamSandwich

    Use a Fragment?

    Jangan dicentang

    Template

    Basic Activity

 

2. Jalankan aplikasi dan ketuk ikon luapan di bilah aplikasi untuk melihat menu opsi, seperti yang ditampilkan dalam gambar di bawah ini. Satu-satunya item di menu opsi adalah Settings.

3. Buat direktori sumber daya baru untuk menampung file XML yang berisi setelan:

  1. Pilih direktori res di tampilan Project: Android, dan pilih File > New > Android Resource Directory. Dialog New Resource Directory akan muncul.
  2. Di menu tarik-turun tipe Resource, pilih xml. Nama Direktori otomatis berubah menjadi xml.
  3. Klik OK.

4. Direktori xml muncul di tampilan Project: Android di dalam direktori res. Pilih direktori xml dan pilih File > New > XML resource file(atau klik kanan direktori xml dan pilih New > XML resource file).

5. Masukkan nama file XML, preferences, di bidang nama File dan klik OK. File preferences.xml muncul di dalam direktori xml dan editor layout muncul,

1.2 Add the XML preference and attributes for the setting

  1. Seret SwitchPreference dari panel Palette di sebelah kiri ke atas layout

2. Ubah nilai di panel Properties di sebelah kanan editor layout seperti berikut (lihat gambar di bawah):

  1. defaultValue: true
  2. key:example_switch
  3. title: Settings option
  4. summary: Turn this option on or off
  • android:defaultValue: Nilai default setelan saat aplikasi dimulai pertama kali.
  • android:title: Judul setelan. Untuk SwitchPreference, judul muncul di sebelah kiri tombol alih.
  • android:key: Kunci yang digunakan untuk menyimpan nilai setelan. Setiap setelan memiliki pasangan nilai-kunci yang sesuai yang digunakan sistem untuk menyimpan setelan dalam file SharedPreferences default untuk setelan aplikasi Anda.
  • android:summary: Rangkuman teks muncul di bawah setelan.

Klik tab Text di bawah editor layout untuk mengedit kode XML:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
   <SwitchPreference
      android:defaultValue="true"
      android:title="Settings option"
      android:key="example_switch"
      android:summary="Turn this option on or off" />
</PreferenceScreen>

Nilai Properties yang Anda masukkan merepresentasikan atribut XML:

  1. Ekstrak sumber daya string untuk nilai atribut android:title dan android:summary menjadi @string/switch_title dan @string/switch_summary.
  2. Ubah <SwitchPreference dalam kode ke <android.support.v7.preference.SwitchPreferenceCompat:

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

3. Bukan file styles.xml dan tambahkan deklarasi preferenceThemeberikut ke AppTheme:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   ...
   <item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>



4. Buka file **build.gradle (Module: app), dan tambahkan yang berikut ini ke bagian dependencies:
dependencies {
   ...
   compile 'com.android.support:preference-v7:25.0.1'
}
  1. 
    

1.3 Add an activity for settings and a fragment for a specific setting

  1. Untuk membuat aktivitas Settings yang menyediakan UI untuk setelan, tambahkan Empty Activity ke aplikasi:

a. Pilih app di bagian atas Project: Android.

b. Pilih New > Activity > Empty Activity.

c. Beri nama aktivitas SettingsActivity.

d. Hapus centang opsi untuk menghasilkan file layout (Anda tidak memerlukannya).

e. Biarkan opsi Backwards Compatibility (AppCompat) dicentang.

f. Nama paket harus sudah disetel ke com.example.android.projectname, dan Target Source Set harus disetel ke main. Jika tidak, buat pilihan ini di menu tarik-turun.

g. Klik Finish.

Hasilnya adalah definisi kelas berikut di SettingsActivity:

    public class SettingsActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    }

 

 
  

2. Tambahkan fragmen kosong untuk grup setelan yang sama (tanpalayout, metode bawaan, atau callback antarmuka) ke aplikasi, untuk menukarnya ke dalam layar aktivitas Settings jika diperlukan:

  1. Pilih app di bagian atas tampilan Project: Android lagi.
  2. Pilih New > Fragment > Fragment (Blank).
  3. Beri nama fragmen SettingsFragment.
  4. Hapus centang opsi untuk menghasilkan file layout (Anda tidak memerlukannya).
  5. Hapus centang opsi untuk menyertakan metode bawaan fragmen.
  6. Hapus centang opsi untuk menyertakan callback antarmuka.
  7. Klik Finish.

 Hasilnya adalah definisi kelas berikut di SettingsFragment:

    public class SettingsFragment extends Fragment {

        public SettingsFragment() {
            // Required empty public constructor
        }

        @Override
        public View onCreateView(LayoutInflater inflater,
                          ViewGroup container, Bundle savedInstanceState) {
            TextView textView = new TextView(getActivity());
            textView.setText(R.string.hello_blank_fragment);
            return textView;
        }
    }

-3. Ubah definisi kelas SettingsFragment untuk memperluas PreferenceFragmentCompat:

public class SettingsFragment extends PreferenceFragmentCompat {
...
}

Gunakan versi PreferenceFragmentCompat dari PreferenceFragment dengan aktivitas yang memperluas AppCompatActivity. Untuk memperluas fragmen, Anda mungkin harus menambahkan pernyataan import berikut:

import android.support.v7.preference.PreferenceFragmentCompat;

4. Ganti seluruh metode onCreateView() di fragmen dengan metode onCreate() ini:

      @Override
      public void onCreatePreferences(Bundle savedInstanceState,
          String rootKey) {
      }
Anda bisa dengan aman membuang constructor kosong dari fragmen, karena fragmen tidak ditampilkan sendiri: public SettingsFragment() {
        // Required empty public constructor
      }

5. Di akhir metode onCreatePreferences() di SettingsFragment, Anda perlu mengaitkan sumber daya setelan preferences.xml yang baru saja Anda buat dengan fragmen ini. Tambahkan sebuah panggilan ke setPreferencesFromResource dengan meneruskan id file XML (R.xml.preferences)) dan rootKey untuk mengidentifikasi root preferensi di PreferenceScreen:

setPreferencesFromResource(R.xml.preferences, rootKey);
Metode onCreatePreferences() sekarang harus terlihat seperti ini:

@Override
public void onCreatePreferences(Bundle savedInstanceState,
String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
}

6. Tambahkan kode berikut ke akhir metode onCreate()SettingsActivity sehingga fragmen ditampilkan sebagai konten utama:

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 konten utama aktivitas. Anda menggunakan:

  • getFragmentManager() jika kelas memperluas Activity dan fragmen memperluas PreferenceFragment.
  • getSupportFragmentManager() jika kelas memperluas AppCompatActivity dan fragmen memperluas PreferenceFragmentCompat.

Seluruh metode onCreate() di SettingsActivity sekarang harus terlihat seperti berikut:

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment())
                .commit();
}

 

1.4 Connect the Settings menu item to the settings activity

Gunakan intent untuk meluncurkan SettingsActivity dari MainActivity.

  1. Temukan blok if di metode onOptionsItemSelected() di MainActivity yang menangani ketukan pada Settings di menu opsi:
    if (id == R.id.action_settings) {
       return true;
    }

2. Tambahkan intent ke blok if untuk meluncurkan SettingsActivity:

if (id == R.id.action_settings) {
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
return true;
}

3. Tambahkan navigasi tombol Up ke SettingsActivity dengan mengedit deklarasinya di file AndroidManifest.xml untuk mendefinisikan induk aktivitas sebagai MainActivity.

a. Temukan deklarasi SettingsActivity di AndroidManifest.xml:

<activity android:name=".SettingsActivity"></activity>

b.Ubah deklarasi menjadi yang berikut ini:
<activity android:name=".SettingsActivity"
    android:label="Settings"
    android:parentActivityName=".MainActivity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity"/>
</activity>

4. Jalankan aplikasi.

  

1.5 Save the default values in shared preferences

  1. Di MainActivity, tambahkan yang berikut ke akhir metode onCreate()yang sudah ada:
protected void onCreate(Bundle savedInstanceState) {
   ...
   PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
}
 

 

1.6 Read the changed settings value from shared preferences

Saat aplikasi dimulai, metode onCreate() MainActivity bisa membaca nilai setelan yang telah berubah, dan menggunakan nilai yang telah berubah, bukannya nilai default.

Ikuti langkah-langkah berikut untuk menambahkan kode tersebut:

  1. Sebelum menambahkan kode untuk membaca nilai setelan, buat variabel string statis di SettingsActivity untuk menampung kunci untuk nilai:
    public class SettingsActivity extends AppCompatActivity {
       public static final String
                       KEY_PREF_EXAMPLE_SWITCH = "example_switch";
        ...
    }
    
  2. Di metode onCreate() di MainActivity, dan tambahkan yang berikut ini ke akhir metode:

    protected void onCreate(Bundle savedInstanceState) {
    ...
    SharedPreferences sharedPref =
                    PreferenceManager.getDefaultSharedPreferences(this);
    Boolean switchPref = sharedPref.getBoolean
                    (SettingsActivity.KEY_PREF_EXAMPLE_SWITCH, false);
    }
    

    Cuplikan kode di atas menggunakan

    • PreferenceManager.getDefaultSharedPreferences(this) untuk mendapatkan setelan sebagai objek SharedPreferences (sharedPref).
    • getBoolean() untuk mendapatkan nilai Boolean setelan yang menggunakan kunci (KEY_PREF_EXAMPLE_SWITCH yang didefinisikan di SettingsActivity) dan menetapkannya ke switchPref. Jika tidak ada nilai untuk kunci, metode getBoolean() akan menyetel nilai setelan (switchPref) ke false. Untuk nilai lain seperti string, integer, dan bilangan titik mengambang, Anda bisa menggunakan metode getString()getInt(), atau getFloat().
  3. Tambahkan metode Toast.makeText() ke onCreate() yang menampilkan nilai setelan switchPref di sebuah toast:

    Toast.makeText(this, switchPref.toString(), Toast.LENGTH_SHORT).show();
    
  4. Jalankan aplikasi, lalu ikuti langkah-langkah ini:
    1. Ketuk Settings untuk melihat aktivitas setelan.
    2. Ketuk setelan untuk mengubah tombol alih dari on ke off, seperti yang ditampilkan di sebelah kiri gambar di bawah.
    3. Ketuk tombol Naik di aktivitas setelan untuk kembali ke aktivitas utama. Pesan toast akan muncul di aktivitas utama dengan nilai setelan, seperti yang ditampilkan di sebelah kanan gambar di bawah.
    4. Ulangi langkah-langkah ini untuk melihat perubahan pesan toast ketika Anda mengubah setelan.

Task 2: Using the Settings Activity template

2.1 Explore the Settings Activity template

Untuk menyertakan template Settings Activity di proyek aplikasi Anda di Android Studio, ikuti langkah-langkah ini:

  1. Salin folder proyek DroidCafe, ubah namanya menjadi DroidCafeWithSettings dan optimalkan kodenya. (Lihat Apendiksuntuk petunjuk menyalin proyek.) Jalankan aplikasi untuk memastikan berjalan lancar.
  2. Pilih app di bagian atas tampilan Project: Android dan pilih New > Activity > Settings Activity.
  3. Dalam dialog yang muncul, terima Activity Name (SettingsActivityadalah nama yang disarankan) dan Title (Settings).
  4. Klik tiga titik di akhir bidang Hierarchical Parent dan pilih MainActivity sebagai aktivitas induk, sehingga tombol Naik di Settings Activity mengembalikan pengguna ke MainActivity. Memilih aktivitas induk otomatis memperbarui file AndroidManifest.xml untuk mendukung navigasi tombol Naik.
  5. Klik Finish.

 

2.2 Add the Settings menu item and connect it to the activity

  1. Edit file menu_main.xml untuk menambahkan item menu lainnya yang bernama Settings dengan id sumber daya baru action_settings:

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="50"
        android:title="Settings"
        app:showAsAction="never" />
    

    Tetapkan "never" untuk atribut app:showAsAction sehingga Settings hanya muncul di menu opsi luapan, dan tidak di bilah aplikasi itu sendiri, karena tidak akan sering digunakan.

    Tetapkan "50" untuk atribut android:orderInCategory sehingga Settings muncul di bawah Favorites (setel ke "40") tetapi di atas Contact (setel di atas "100").

  2. Ekstrak sumber daya string untuk "Settings" di atribut android:title ke nama sumber daya settings.
  3. Di MainActivity, temukan blok switch-case di metode onOptionsItemSelected() yang menangani ketukan pada item di menu opsi:

    public boolean onOptionsItemSelected(MenuItem item) {
       switch (item.getItemId()) {
          case R.id.action_order:
             displayToast(getString(R.string.action_order_message));
             return true;
          case R.id.action_status:
             displayToast(getString(R.string.action_status_message));
             return true;
          case R.id.action_favorites:
                   displayToast(getString(R.string.action_favorites_message));
             return true;
          case R.id.action_contact:
             displayToast(getString(R.string.action_contact_message));
             return true;
             }
    
       return super.onOptionsItemSelected(item);
    }
    
  4. Gunakan intent untuk meluncurkan SettingsActivity dari MainActivity. Tambahkan intent di akhir blok switch case:

          ...
          case R.id.action_settings:
             Intent intent = new Intent(this, SettingsActivity.class);
             startActivity(intent);
             return true;
             }
    
       return super.onOptionsItemSelected(item);
    }
    
  5. Jalankan aplikasi menggunakan ponsel cerdas atau emulator ponsel cerdas sehingga Anda bisa melihat bagaimana template Settings Activity menangani ukuran layar ponsel cerdas, dan ikuti langkah-langkah ini:

    1. Ketuk ikon luapan untuk menu opsi dan ketuk Settings untuk melihat aktivitas setelan, seperti yang ditampilkan di sebelah kiri gambar di bawah.

    2. Ketuk setiap header setelan (GeneralNotifications, dan Data & sync), seperti yang ditampilkan di bagian tengah gambar di bawah, untuk melihat grup setelan di setiap layar anak di layar anak Settings, seperti yang ditampilkan di sebelah kanan gambar di bawah.

    3. Ketuk tombol Naik di aktivitas setelan untuk kembali ke aktivitas utama.

2.3 Customize the settings provided by the template

  1. Buka file strings.xml di direktori res > values dan konten ke komentar <!-- Example settings for Data & Sync -->:

    <!-- Example settings for Data & Sync -->
        <string name="pref_header_data_sync">Data & sync</string>
    
        <string name="pref_title_sync_frequency">Sync frequency</string>
        <string-array name="pref_sync_frequency_titles">
            <item>15 minutes</item>
            <item>30 minutes</item>
            <item>1 hour</item>
            <item>3 hours</item>
            <item>6 hours</item>
            <item>Never</item>
        </string-array>
        <string-array name="pref_sync_frequency_values">
            <item>15</item>
            <item>30</item>
            <item>60</item>
            <item>180</item>
            <item>360</item>
            <item>-1</item>
        </string-array>
              ...
    
  2. Edit sumber daya string pref_header_data_sync yang disetel ke Data & sinkron& adalah kode HTML untuk ampersand). Ubah nilai ke Account (tanpa tanda petik).
  3. Optimalkan nama sumber daya dengan mengikuti langkah-langkah ini (aplikasi masih akan berjalan tanpa mengoptimalkan nama, tetapi pengoptimalan akan membuat kode lebih mudah dipahami):

    1. Kontrol-klik (atau klik kanan) nama sumber daya pref_header_data_sync dan pilih Refactor > Rename.
    2. Ubah nama menjadi pref_header_account, klik opsi untuk menelusuri di komentar dan string, dan klik Refactor.
  4. Edit sumber daya string pref_title_sync_frequency (yang disetel ke Sync frequency) menjadi Market.

  5. Refactor > Rename nama sumber daya menjadi pref_title_accountseperti yang sudah Anda lakukan sebelumnya.
  6. Refactor > Rename sumber daya larik string pref_sync_frequency_titles menjadi pref_market_titles.
  7. Ubah setiap nilai di larik string pref_market_titles (15 minutes30 minutes1 hour, dsb.) menjadi judul pasar, seperti United StatesCanada, dsb., bukan frekuensi:
    <string-array name="pref_market_titles">
            <item>United States</item>
            <item>Canada</item>
            <item>United Kingdom</item>
            <item>India</item>
            <item>Japan</item>
            <item>Other</item>
    </string-array>
    
  8. Refactor > Rename sumber daya larik string pref_sync_frequency_values menjadi pref_market_values.
  9. Ubah setiap nilai di larik string pref_market_values (153060, dsb.) menjadi nilai pasar—yaitu singkatan, seperti USCA, dsb.:
    <string-array name="pref_market_values">
            <item>US</item>
            <item>CA</item>
            <item>UK</item>
            <item>IN</item>
            <item>JA</item>
            <item>-1</item>
        </string-array>
    
  10. Gulir ke bawah ke sumber daya string pref_title_system_sync_settings dan edit sumber daya (yang disetel ke System sync settings) menjadi Account settings.
  11. Refactor > Rename sumber daya larik string pref_title_system_sync_settings menjadi pref_title_account_settings.
  12. Buka file pref_data_sync.xmlListPreference di layout ini mendefinisikan setelan yang baru saja Anda ubah. Perhatikan bahwa sumber daya string untuk atribut android:entriesandroid:entryValues, dan android:title sekarang diubah menjadi nilai yang Anda berikan di langkah sebelumnya:
    <ListPreference
            android:defaultValue="180"
            android:entries="@array/pref_market_titles"
            android:entryValues="@array/pref_market_values"
            android:key="sync_frequency"
            android:negativeButtonText="@null"
            android:positiveButtonText="@null"
            android:title="@string/pref_title_account" />
    
  13. Ubah atribut android:defaultValue:
    android:defaultValue="US"

2.4 Add code to set the default values for the settings

Temukan metode onCreate() di MainActivity, dan tambahkan pernyataan PreferenceManager.setDefaultValues berikut di akhir metode:

@Override
protected void onCreate(Bundle savedInstanceState) {
   ...
   PreferenceManager.setDefaultValues(this, R.xml.pref_general, false);
   PreferenceManager.setDefaultValues(this, R.xml.pref_notification, false);
   PreferenceManager.setDefaultValues(this, R.xml.pref_data_sync, false);
}

2.5 Add code to read values for the settings

  1. Tambahkan kode berikut di akhir metode onCreate() MainActivity. Anda bisa langsung menambahkannya setelah kode yang Anda tambahkan di langkah sebelumnya untuk menyetel default untuk setelan:

    ...
    SharedPreferences sharedPref =
                PreferenceManager.getDefaultSharedPreferences(this);
    String marketPref = sharedPref.getString("sync_frequency", "-1");
    Toast.makeText(this, marketPref, Toast.LENGTH_SHORT).show();
    }
    
  2. Jalankan aplikasi lagi menggunakan ponsel cerdas atau emulator ponsel cerdas. Saat layar utama aplikasi muncul pertama kali, Anda akan melihat pesan toast di bawah layar. Pertama kali menjalankan aplikasi, Anda akan melihat “-1” yang ditampilkan di toast karena Anda belum mengubah setelan.

3. Ketuk Settings di menu opsi dan ketuk Account di layar Settings. Pilih Canada* di “Market” seperti yang ditampilkan di bawah ini:

4. Ketuk tombol Naik di bilah aplikasi untuk kembali ke layar Settings, dan ketuk lagi untuk kembali ke layar utama. Anda akan melihat pesan toast yang menampilkan “CA” (yang berarti Canada):

Anda telah berhasil mengintegrasikan Settings Activity dengan aplikasi Droid Cafe.

5. Sekarang jalankan aplikasi di tablet atau emulator tablet.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *