5.1: Drawable, Gaya, dan Tema

Tugas 1: Membuat Aplikasi Scorekeeper

1.1 Buat proyek “Scorekeeper”

  1. Mulai Android Studio dan buat proyek Android Studio baru.
    • Beri nama proyek Anda “Scorekeeper”
    • Terima default untuk Company Domain dan Project location.
  2. Pilih template Empty Activity. 1 Terima nama default untuk aktivitas, pastikan Generate Layout Filedicentang dan klik Finish.

1.2 Buat layout untuk aktivitas utama

  1. Buka file layout untuk aktivitas utama.
  2. Hapus TextView yang berisi “Hello World.”
  3. Ubah tampilan root menjadi LinearLayout dan tambahkan atribut berikut (tanpa menghapus atribut yang sudah ada):
    Atribut Nilai
    android:orientation “vertical”

  4. Di dalam LinearLayout, tambahkan dua grup tampilan RelativeLayout (satu untuk menampung skor untuk setiap tim) dengan atribut berikut:
    Atribut Nilai
    android:layout_width “match_parent”
    android:layout_height “0dp”
    android:layout_weight “1”
  5. Tambahkan dua tampilan ImageButton (satu untuk meningkatkan skor dan satu untuk menurunkan skor) dan sebuah TextView untuk menampilkan skor di antara tombol ke setiap RelativeLayout.
  6. Tambahkan atribut android:id ke TextView skor dan semua ImageButton.
  7. Tambahkan satu lagi TextView ke setiap RelativeLayout di atas skor untuk menunjukkan Nama Tim.

Implementasikan fungsionalitas onClick untuk tombol Anda.

  1. Di MainActivity Anda, implementasi dua metode onClick: increaseScore() dan decreaseScore().

    Catatan: semua metode onClick memiliki tanda tangan yang sama – metode ini mengembalikan void dan mengambil View sebagai argumen.
  2. Tombol kiri akan mengurangi TextView skor, sedangkan tombol kanan akan menambahnya.

Tugas 2: Membuat sumber daya Drawable

2.1 Buat Drawable Bentuk

  1. Klik kanan folder drawable di direktori sumber daya.
  2. Pilih New > Drawable resource file.
  3. Beri nama file “button_background” dan klik OK.
  4. Buang semua kode, kecuali:
    <?xml version="1.0" encoding="utf-8"?>
    
  5. Tambahkan kode berikut yang membuat bentuk oval dengan garis luar:
    <shape
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval">
            <stroke
                android:width="2dp"
                android:color="@color/colorPrimary"/>
    </shape>

2.2 Terapkan drawable bentuk sebagai latar belakang

  1. Buka file layout untuk aktivitas utama Anda.
  2. Untuk semua tombol, tambah drawable sebagai latar belakang: android:background="@drawable/button_background". Perhatikan bahwa latar belakang otomatis diskalakan agar pas dengan ukuran tampilan.
  3. Ukuran tombol besarnya harus sedemikian rupa sehingga bisa dirender dengan benar di semua perangkat. Ubah “layout_height” dan “layout_width” untuk setiap tombol menjadi 70dp, yaitu ukuran yang baik untuk kebanyakan perangkat. Menggunakan dimensi yang di-hardcode bukanlah praktik terbaik, tetapi menggunakan ketebalan dengan layout linear yang dilapiskan untuk mendapatkan ukuran yang diinginkan akan melibatkan terlalu banyak detail untuk praktik ini.
    android:layout_width="70dp"
    android:layout_height="70dp"
    
  4. Ekstrak sumber daya dimensi sehingga Anda bisa mengaksesnya di satu lokasi. Untuk informasi cara melakukannya, lihat Appendix.
  5. Jalankan aplikasi Anda.

Tugas 3: Tata gaya tampilan Anda

3.1 Buat gaya tombol

Dalam direktori sumber daya, cari dan buka file “values/styles.xml”. Di file inilah semua kode gaya Anda ditempatkan. Gaya “AppTheme” selalu ditambahkan secara otomatis dan Anda bisa melihat bahwa gaya ini diluaskan dari “Theme.AppCompat.Light.DarkActionBar”.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

Buat gaya untuk tombol plus dengan melluaskan gaya “ScoreButtons”:

Buat gaya untuk tombol minus:

Di file layout untuk aktivitas utama, buang semua atribut yang Anda definisikan di gaya untuk setiap tombol dan ganti dengan gaya yang sesuai:

3.2 Buat gaya TextView

Tampilan teks untuk menampilkan nama tim dan skor juga bisa ditata gayanya karena warna dan font-nya sama. Lakukan yang berikut:

  1. Tambahkan atribut berikut ke semua TextView:+
    android:textAppearance="@style/TextAppearance.AppCompat.Headline"

Tugas 4: Tema dan Sentuhan Akhir

4.1 Jelajahi tema

  1. Di file manifes Android, temukan atribut <application> tag dan ubah android:theme ke:

    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
    

    Ini adalah tema yang ditentukan sebelumnya yang membuang bilah tindakan dari aktivitas Anda.

  2. Jalankan aplikasi Anda. Bilah alat menghilang!

  3. Ubah tema aplikasi kembali ke AppTheme yang merupakan anak tema Theme.Appcompat.Light.DarkActionBar seperti yang bisa dilihat di styles.xml.

4.2 Tambahkan tombol tema ke menu

  1. Klik kanan direktori “res” dan pilih New > Android resource file.
  2. Beri nama file “main_menu”, ubah Resource Type ke Menu, dan klik OK.
  3. Tambahkan item menu dengan atribut berikut:
    <item
        android:id="@+id/night_mode"
        android:title="@string/night_mode"/>
    
  4. Buka “strings.xml” dan buat dua sumber daya string:
    <string name="night_mode">Night Mode</string>
    <string name="day_mode">Day Mode</string>
    
  5. Tekan Ctrl – O untuk membuka menu Override Method di file Java aktivitas utama Anda dan pilih metode onCreateOptionsMenu yang terletak di bawah kategori “android.app.Activity”. Klik OK.
  6. Mekarkan menu yang baru Anda buat di dalam metode onCreateOptionsMenu() :
    getMenuInflater().inflate(R.menu.main_menu, menu);

4.3 Ubah tema dari menu

  1. Di file styles.xml, ubah induk AppTheme menjadi “Theme.AppCompat.DayNight.DarkActionBar.
  2. Ganti metode onOptionsItemSelected() di MainActivity dan periksa item menu mana yang diklik:
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
       //Check if the correct item was clicked
       if(item.getItemId()==R.id.night_mode){}
    }
    
  3. Sebagai respons terhadap klik pada tombol menu, Anda bisa memverifikasi setelan mode malam saat ini dengan memanggil AppCompatDelegate.getDefaultNightMode().
  4. Jika mode malam diaktifkan, ubah menjadi status nonaktif:
    //Get the night mode state of the app
    int nightMode = AppCompatDelegate.getDefaultNightMode();
    //Set the theme mode for the restarted activity
    if(nightMode == AppCompatDelegate.MODE_NIGHT_YES) {
       AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    }
    
  5. Jika tidak, aktifkan mode ini:
    else {
       AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    }
    
  6. Tema hanya bisa berubah saat aktivitas sedang dibuat, sehingga panggil recreate() agar perubahan tema bisa diterapkan.
  7. Metode onOptionsItemSelected() Anda harus mengembalikan true, karena klik item ditangani.
  8. Jalankan aplikasi Anda. Menu “Mode Malam” sekarang akan mengalihkan tema aktivitas Anda. Anda mungkin memperhatikan bahwa label untuk item menu Anda selalu tampak sebagai “Night Mode” yang mungkin membingungkan pengguna jika aplikasi Anda sudah dalam tema gelap.
  9. Tambahkan kode berikut di metode onCreateOptionsMenu:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       //Inflate the menu from XML
       getMenuInflater().inflate(R.menu.main_menu, menu);
    
       //Change the label of the menu based on the state of the app
       int nightMode = AppCompatDelegate.getDefaultNightMode();
       if(nightMode == AppCompatDelegate.MODE_NIGHT_YES){
           menu.findItem(R.id.night_mode).setTitle(R.string.day_mode);
       } else{
           menu.findItem(R.id.night_mode).setTitle(R.string.night_mode);
       }
       return true;
    }
    
  10. Jalankan aplikasi Anda. Label tombol menu sekarang berubah dengan tema.

4.4 SaveInstanceState

  1. Ganti metode onSaveInstanceState() di MainActivity agar mempertahankan nilai dua TextView skor:
    @Override
    protected void onSaveInstanceState(Bundle outState) {
       //Save the scores
       outState.putInt(STATE_SCORE_1, mScore1);
       outState.putInt(STATE_SCORE_2, mScore2);
       super.onSaveInstanceState(outState);
    }
    
  2. Di metode onCreate() MainActivity.java, periksa apakah terdapat savedInstanceState. Jika ada, pulihkan skor ke tampilan teks:

    if (savedInstanceState != null) {
        mScore1 = savedInstanceState.getInt(STATE_SCORE_1);
        mScore2 = savedInstanceState.getInt(STATE_SCORE_2);
    
        //Set the score text views
        mScoreText1.setText(String.valueOf(mScore1));
        mScoreText2.setText(String.valueOf(mScore2));
    }
    

Cukup demikian! Selamat, Anda sekarang memiliki Aplikasi Scorekeeper dengan gaya.

Leave a Reply

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