3.3: Menggunakan Pustaka Dukungan Android
Daftar Isi:
- Yang harus sudah Anda KETAHUI
- Yang akan Anda PELAJARI
- Yang akan Anda LAKUKAN
- Ringkasan Aplikasi
- Tugas 1. Menyiapkan proyek Anda untuk mendukung pustaka
- Tugas 2. Mengimplementasikan perilaku tombol
- Tantangan penyusunan kode
- Rangkuman
- Konsep terkait
Android SDK menyertakan sejumlah pustaka secara kolektif yang disebut pustaka dukungan Android. Pustaka ini menyediakan sejumlah fitur yang tidak dibangun ke dalam framework Android, termasuk:
- Versi kompatibel-mundur dari komponen framework: Pustaka dukungan memungkinkan aplikasi berjalan pada versi platform Android lama untuk mendukung fitur-fitur yang tersedia pada versi platform yang lebih baru.
- Elemen layout dan antarmuka pengguna tambahan
- Dukungan untuk faktor bentuk yang berbeda, seperti TV atau perangkat yang dapat dikenakan
- Komponen untuk mendukung elemen desain bahan
- Beragam fitur lainnya seperti dukungan palet, anotasi, dimensi layout berdasarkan persentase, dan preferensi.
Yang harus sudah Anda KETAHUI
Dari praktik sebelumnya, Anda harus sudah memahami:
- Cara membuat proyek di Android Studio.
- Komponen utama proyek Android Studio (manifes, sumber daya, file Java, file pembangunan gradle).
Yang akan Anda PELAJARI
- Cara memverifikasi apakah pustaka dukungan Android tersedia di Android Studio.
- Cara menunjukkan kelas pustaka dukungan dalam aplikasi.
- Cara membedakan nilai untuk compileSdkVersion, targetSdkVersion, dan minSdkVersion.
- Cara mengenali API yang tidak digunakan lagi atau tidak tersedia dalam kode.
- Tempat menemukan informasi selengkapnya pada pustaka dukungan Android.
Yang akan Anda LAKUKAN
Dalam praktik ini Anda akan:
- Membuat aplikasi baru dengan satu textview dan tombol.
- Memverifikasi bahwa Pustaka Dukungan Android tersedia di sistem.
- Menjelajahi build.gradle untuk aplikasi.
- Mengelola kelas atau panggilan metode yang tidak tersedia untuk versi Android yang didukung aplikasi.
- Menggunakan kelas kompatibilitas dari pustaka dukungan untuk menyediakan kompatibilitas-mundur untuk aplikasi Anda.
Ringkasan Aplikasi
Dalam praktik ini Anda akan membuat aplikasi bernama HelloCompat dengan satu textview yang menampilkan "Hello World" pada layar, dan satu tombol, yang mengubah warna teks. Ada 20 warna yang mungkin, didefinisikan sebagai sumber daya dalam file color.xml, dan setiap klik tombol memilih salah satu dari warna tersebut secara acak.
Metode untuk mendapatkan nilai warna dari sumber daya aplikasi telah berubah dengan versi yang berbeda untuk framework Android. Contoh ini menggunakan kelas ContextCompat, bagian dari pustaka dukungan Android, yang mengizinkan Anda menggunakan metode yang cocok untuk semua versi.
Tugas 1. Menyiapkan proyek
Untuk tugas ini Anda akan menyiapkan proyek baru untuk aplikasi HelloCompat dan mengimplementasikan layout serta perilaku dasar.
1.1 Memverifikasi bahwa Pustaka Dukungan Android tersedia
Pustaka dukungan Android diunduh berdasarkan bagian dari SDK, dan tersedia dalam Android SDK Manager. Dalam Android Studio, Anda akan menggunakan Android Support Repository, repositori lokal untuk pustaka pendukung, untuk mendapatkan akses ke pustaka di dalam file pembangunan gradle. Dalam tugas ini Anda akan memverifikasi bahwa Android Support Repository diunduh dan tersedia untuk proyek.
Dalam Android Studio, pilih Tools > Android > SDK Manager, atau klik ikon SDK Manager .
Panel preferensi SDK Manager muncul.
- Klik tab SDK Tools dan perluas Support Repository.
- Cari Support Repository dalam daftar.
- Jika kata Installed muncul di kolom Status, Anda sudah siap. Klik Cancel.
- Jika Not installed atau Update Available muncul, klik kotak centang di sebelah Android Support Repository. Ikon unduh seharusnya muncul di samping kotak centang. Klik OK.
- Klik OK lagi, lalu klik Finish saat repositori pendukung sudah dipasang.
1.2 Menyiapkan Proyek dan memeriksa build.gradle
Buat proyek baru bernama HelloCompat, dan pilih template Empty Activity.
Pada laman Perangkat Android Target, catat bahwa API 15: Android 4.0.3 (IceCreamSandwich) dipilih untuk SDK minimum. Seperti yang sudah Anda pelajari pada pelajaran sebelumnya, ini adalah versi terlama platform Android yang akan didukung oleh aplikasi Anda.
- Di Android Studio, pastikan panel Project dibuka dan tab Android diklik.
Perluas Gradle Scripts, jika perlu, dan buka file build.gradle (Module: app).
Perhatikan bahwa build.gradle untuk keseluruhan proyek (build.gradle (Project: app_name) adalah file yang berbeda dari build.gradle untuk modul aplikasi.
Temukan baris compileSdkVersion di dekat bagian atas file.
compileSdkVersion 24
Versi kompilasi adalah versi framework Android yang menyusun aplikasi Annda dalam Android Studio. Untuk proyek baru, versi kompilasi adalah serangkaian framework API terbaru yang Anda pasang. Nilai ini memengaruhi hanya Android Studio itu sendiri dan peringatan atau kesalahan yang Anda dapatkan dalam Android Studio, jika menggunakan API yang lebih lama atau lebih baru.
Temukan baris minSdkVersion dalam bagian defaultConfig beberapa baris di bawah.
minSdkVersion 15
Versi minimum adalah versi API Android terlama tempat aplikasi Anda dijalankan. Ini sama dengan angka yang Anda pilih pada Langkah 1 saat membuat proyek. Google Play store menggunakan angka ini untuk memastikan aplikasi dapat berjalan pada perangkat pengguna yang diberikan Android Studio juga menggunakan angka ini untuk mengingatkan Anda tentang penggunaan API yang sudah tidak digunakan lagi.
Temukan baris targetSdkVersion dalam bagian defaultConfig.
targetSdkVersion 24
Versi target menunjukkan versi API yang didesain dan diuji untuk aplikasi Anda. Jika API platform Android lebih tinggi dari angka ini (yakni aplikasi Anda berjalan pada perangkat yang lebih baru), platform dapat mengaktifkan perilaku kompatibilitas untuk memastikan aplikasi terus bekerja seperti yang didesain. Contohnya, Android 6.0 (API 23) menyediakan model izin waktu proses baru. Jika aplikasi menargetkan level API yang lebih rendah, platform kembali ke model izin waktu proses yang lebih lama.
Walaupun SDK target bisa berupa nomor yang sama dengan SDK kompilasi, sering kali nomornya lebih rendah yang menunjukkan versi terbaru API yang sudah diuji untuk aplikasi Anda.
Temukan bagian
dependencies
build.gradle, dekat bagian akhir file.dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile( 'com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:24.2.1' testCompile 'junit:junit:4.12' }
Bagian dependensi untuk proyek baru menyertakan beberapa dependensi untuk mengaktifkan pengujian dengan Espresso, JUnit, dan pustaka dukungan v7 appcompat. Catat bahwa nomor versi pustaka ini dalam proyek Anda bisa berbeda dengan yang ditunjukkan di sini.
Pustaka dukungan v7 appcompat menyediakan kompatibilitas-mundur untuk versi Android yang lebih lama hingga ke API 9. Ini juga termasuk pustaka v4 compat, jadi Anda tidak perlu menambahkan keduanya sebagai dependensi.
Perbarui nomor versi, jika perlu.
Jika nomor versi pustaka terbaru lebih rendah dari nomor versi pustaka yang saat ini tersedia, Android Studio akan menyorot baris dan memperingati Anda bahwa versi baru tersedia. ("a newer version of com.android.
support:appcompat-v7
is available"). Edit nomor versi ke versi terbaru.Tips: : Anda juga bisa mengeklik di mana saja pada baris yang disorot dan mengetikkan **Alt-Enter** (**Option-Enter** di Mac). Pilih "Change to XX.X.X" dari menu, di mana XX.X.X adalah versi paling baru yang tersedia.Perbarui nomor compileSdkVersion, jika perlu.
Nomor versi utama pustaka dukungan (nomor pertama) harus cocok dengan compileSdkVersion. Saat Anda memperbarui versi pustaka dukungan Anda mungkin juga perlu memperbarui compileSdkVersion agar sesuai.
- Klik Sync Now untuk menyinkronkan file gradle terbaru dengan proyek, jika diminta.
Pasang file platform SDK yang hilang, jika perlu.
Jika Anda memperbarui compileSdkVersion, Anda mungkin perlu memasang komponen platform SDK agar cocok. Klik Install missing platform(s) and sync project untuk memulai proses ini.
1.3 Menambahkan layout dan warna
Dalam tugas ini, modifikasi layout untuk aplikasi.
- Buka
res/layout/activity_main.xml
. Dalam Layout Editor, klik tab Text untuk melihat editor XML. Modifikasi elemen TextView agar memiliki atribut berikut:
Atribut Nilai android:id "@+id/hello_textview" android:layout_width "match_parent" android:layout_height "wrap_content" android:padding "@dimen/activity_horizontal_margin"
android:gravity "center" android:textSize "100sp" android:textStyle "bold" android:text "Hello World!" - Ekstrak string untuk "Hello World" ke dalam sumber daya string.
Tambahkan tampilan Tombol di bawah TextView, dan tambahkan atribut berikut:
Atribut Nilai android:id "@+id/color_button" android:layout_width "match_parent" android:layout_height "wrap_content" android:layout_alignParentBottom "true" android:paddingTop "@dimen/activity_vertical_margin"
android:text "Change Color" android:onClick "changeColor" - Ekstrak string untuk "Change Color" ke dalam sumber daya string.
- Buka
res/values/colors.xml
. - Tambahkan sumber daya warna berikut ke file:
<color name="red">#F44336</color> <color name="pink">#E91E63</color> <color name="purple">#9C27B0</color> <color name="deep_purple">#673AB7</color> <color name="indigo">#3F51B5</color> <color name="blue">#2196F3</color> <color name="light_blue">#03A9F4</color> <color name="cyan">#00BCD4</color> <color name="teal">#009688</color> <color name="green">#4CAF50</color> <color name="light_green">#8BC34A</color> <color name="lime">#CDDC39</color> <color name="yellow">#FFEB3B</color> <color name="amber">#FFC107</color> <color name="orange">#FF9800</color> <color name="deep_orange">#FF5722</color> <color name="brown">#795548</color> <color name="grey">#9E9E9E</color> <color name="blue_grey">#607D8B</color> <color name="black">#000000</color>
Nilai dan nama warna berasal dari palet warna yang direkomendasikan untuk aplikasi Android yang didefinisikan di Desain Material - Gaya - Warna. Kode menunjukkan nilai RGB warna dalam heksadesimal.
Kode Solusi (activity_main.xml)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.android.hellocompat.MainActivity">
<TextView
android:id="@+id/hello_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="@dimen/activity_horizontal_margin"
android:text="@string/hello_text_string"
android:textSize="100sp"
android:textStyle="bold" />
<Button
android:id="@+id/color_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:onClick="changeColor"
android:paddingTop="@dimen/activity_vertical_margin"
android:text="@string/button_label" />
</RelativeLayout>
1.4 Menambahkan perilaku ke MainActivity
Dalam tugas ini Anda akan menyelesaikan persiapan proyek dengan menambahkan variabel privat dan mengimplementasikan onCreate() dan onSaveInstanceState().
- Buka MainActivity.java.
- Tambahkan variabel privat di bagian atas kelas untuk menampung objek TextView untuk textview Hello World.
private TextView mHelloTextView;
Tambahkan larik warna berikut ini setelah variabel privat:
private String[] mColorArray = {"red", "pink", "purple", "deep_purple", "indigo", "blue", "light_blue", "cyan", "teal", "green", "light_green", "lime", "yellow", "amber", "orange", "deep_orange", "brown", "grey", "blue_grey", "black" };
Setiap nama warna cocol dengan nama sumber daya warna dari color.xml.
- Dalam metode onCreate(), gunakan findViewByID() untuk mendapatkan referensi tentang contoh TextView dan menetapkannya ke variabel privat tersebut:
mHelloTextView = (TextView) findViewById(R.id.hello_textview);
- Juga pada onCreate(), pulihkan status instance tersimpan, jika ada:
// restore saved instance state (the text color) if (savedInstanceState != null) { mHelloTextView.setTextColor(savedInstanceState.getInt("color")); }
Tambahkan metode onSaveInstanceState() ke MainActivity untuk menyimpan warna teks:
@Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // save the current text color outState.putInt("color", mHelloTextView.getCurrentTextColor()); }
Kode Solusi (bukan seluruh kelas)
// Text view for Hello World.
private TextView mHelloTextView;
// array of color names, these match the color resources in color.xml
private String[] mColorArray = {"red", "pink", "purple", "deep_purple",
"indigo", "blue", "light_blue", "cyan", "teal", "green",
"light_green", "lime", "yellow", "amber", "orange", "deep_orange",
"brown", "grey", "blue_grey", "black"
};
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize the main text view
mHelloTextView = (TextView) findViewById(R.id.hello_textview);
// restore saved instance state (the text color)
if (savedInstanceState != null) {
mHelloTextView.setTextColor(savedInstanceState.getInt("color"));
}
}
...
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save the current text color
outState.putInt("color", mHelloTextView.getCurrentTextColor());
}
Tugas 2. Mengimplementasikan perilaku tombol
Tombol Change Color dalam aplikasi HelloCompat memilih satu dari 20 warna dari file sumber daya color.xml secara acak dan menyetel warna teks ke warna tersebut. Dalam tugas ini Anda akan mengimplementasikan perilaku onClick() untuk handler ini.
2.1 Tambahkan handler onClick changeButton()
- Buka
res/layout/activity_main.xml
, jika belum terbuka. - Klik di mana saja dalam atribut android:onClick, di dalam elemen Button.
- Tekan Alt-Enter (Option-Enter di Mac), dan pilih Create onClick event handler.
Pilih MainActivity klik OK.
Tindakan ini akan membuat stub metode placeholder untuk metode changecolor() dalam MainActivity.java.
2.2 Implementasikan tindakan tombol
- Buka MainActivity.java, jika belum terbuka.
Dalam metode changeColor(), buat objek nomor secara acak.
Random random = new Random();
Gunakan kelas Random (kelas Java) untuk menghasilkan nomor acak sederhana.
Gunakan instance acak untuk memilih warna secara acak dari larik mColorArray:
String colorName = mColorArray[random.nextInt(20)];
Metode nextInt() dengan argumen 20 akan mendapatkan integer acak antara nomor 0 sampai 19. Gunakan integer itu sebagai indeks larik untuk mendapatkan nama warna.
Dapatkan identifier (integer) untuk nama warna dari sumber daya:
int colorResourceName = getResources().getIdentifier(colorName, "color", getApplicationContext().getPackageName());
Saat aplikasi Anda dikompilasi, sistem Android mengonversi definisi dalam file XML ke dalam sumber daya dengan ID integer internal. Ada ID terpisah untuk nama dan nilai. Baris ini cocok dengan string warna dari larik colorName dengan ID nama warna yang cocok dalam file sumber daya XML. Metode getResources() mendapatkan semua sumber daya untuk aplikasi Anda. Metode getIdentifier() mencari nama warna (string) dalam sumber daya warna ("color") untuk nama paket saat ini.
Dapatkan ID integer dari sumber daya dan tetapkan ke variabel colorRes:
int colorRes = getResources().getColor(colorResourceName);
Metode getResources mendapatkan serangkaian sumber daya untuk aplikasi Anda, dan metode getColor() mengambil warna spesifik dari sumber daya itu berdasarkan ID nama warna.
Perhatikan bahwa metode getColor() muncul dengan coretan dalam editor Android Studio. Jika Anda mengarahkan mouse ke getColor(), pesan kesalahan "getColor(int) is deprecated" muncul. Dalam API 23, metode getColor() dimodifikasi untuk menyertakan argumen kedua untuk tema aplikasi. Karena aplikasi Anda memiliki compileSdkVersion 24 (atau yang lebih tinggi), Android Studio memberikan peringatan bahwa Anda menggunakan metode lama yang tidak digunakan lagi.
Anda masih bisa mengompilasi aplikasi dan aplikasi akan tetap berjalan baik pada perangkat Android baru maupun perangkat yang lama. Peringatan penghentian penggunaan adalah peringatan, bukan kesalahan. Namun, sebaiknya jangan abaikan peringatan, jika ada, karena metode yang sudah tidak digunakan lagi bisa mengakibatkan perilaku tak terduga.
Ubah baris penetapan colorRes untuk menyertakan argumen kedua ke getColor():
int colorRes = getResources().getColor(colorResourceName, this.getTheme());
Anda bisa menggunakan metode getTheme() untuk mendapatkan tema untuk konteks aplikasi saat ini. Hanya dengan perubahan ini Anda sekarang akan mengingat bahwa getColor() memiliki sorotan bergaris bawah merah. Jika Anda mengarahkan kursor ke getColor(), Android Studio akan melaporkan: "Call requires API 23 (current min is 15)". Karena minSdkVersion Anda adalah 15, Anda akan mendapatkan pesan ini jika mencoba menggunakan API yang diperkenalkan setelah API 15. Anda masih bisa mengompilasi aplikasi, tetapi karena versi baru getColor() dengan dua argumen ini tidak tersedia pada perangkat sebelum API 23, Aplikasi akan crash saat pengguna mengetuk tombol Change.
Pada tahap ini Anda bisa memeriksa versi platform dan menggunakan versi getColor() yang benar tergantung di mana aplikasi berjalan (Anda akan tetap menerima peringatan untuk kedua panggilan di Android Studio). Cara yang lebih baik untuk mendukung API Android lama dan baru tanpa peringatan adalah dengan menggunakan salah satu dari kelas kompatibilitas dalam pustaka dukungan.
Ubah baris penetapan colorRes untuk menggunakan kelas ContextCompat:
int colorRes = ContextCompat.getColor(this, colorResourceName);
ContextCompat menyediakan banyak metode kompatibilitas untuk menyelesaikan perbedaan API dalam konteks dan sumber daya aplikasi. Metode getColor() dalam ContextCompat memerlukan dua argumen: konteks saat ini (di sini, instance aktivitas, ini), dan nama warna.
Implementasi metode ini dalam pustaka dukungan menyembunyikan perbedaan implementasi dalam versi API yang berbeda. Anda bisa memanggil metode ini terlepas dari SDK kompilasi atau versi SDK minimum tanpa peringatan, kesalahan, atau crash.
- Setel warna tampilan teks Hello World tke ID sumber daya warna:
mHelloTextView.setTextColor(colorRes);
Kompilasi dan jalankan aplikasi pada perangkat atau emulator.
Tombol Change Color sekarang seharusnya mengubah warna teks dalam Hello World.
Kode Solusi (hanya metode changeColor())
public void changeColor(View view) {
// get a random color name from the color array (20 colors)
Random random = new Random();
String colorName = mColorArray[random.nextInt(20)];
// get the color identifier that matches the color name
int colorResourceName = getResources().getIdentifier(colorName, "color",
getApplicationContext().getPackageName());
// get the color ID from the resources
int colorRes = ContextCompat.getColor(this, colorResourceName);
// Set the text color
mHelloTextView.setTextColor(colorRes);
}
Kode Solusi
Proyek Android Studio: HelloCompat
Tantangan penyusunan kode
Tantangan: Sebagai ganti menggunakan ContextCompat untuk mendapatkan sumber daya warna, gunakan pengujian nilai dalam kelas Build untuk melakukan operasi yang berbeda jika aplikasi berjalan pada perangkat yang mendukung kurang dari API 23.
Rangkuman
Dalam praktik ini Anda telah mempelajari bahwa:
- Android menggunakan tiga arahan untuk menunjukkan bagaimana aplikasi harusnya berperilaku untuk versi API yang berbeda:
- minSdkVersion: versi API minimum untuk dukungan aplikasi Anda.
- compileSdkVersion: versi API yang harus dikompilasi dengan aplikasi Anda.
- targetSdkVersion: versi API untuk aplikasi Anda.
- Pustaka Dukungan Android dapat dipasang dalam SDK Manager
- Anda bisa menambahkan dependensi pustaka untuk pustaka dukungan dalam file gradle.build
- Kelas ContextCompat menyediakan metode untuk kompatibilitas dengan konteks dan metode terkait sumber daya untuk kedua level API lama dan baru.
Konsep terkait
Dokumentasi konsep terkait ada di Dasar-Dasar Developer Android: Konsep.
Ketahui Selengkapnya
- Pustaka Dukungan Android (Pengantar)
- Persiapan Pustaka Dukungan
- Fitur Pustaka Dukungan
- Mendukung Versi Platform Berbeda
- Memilih compileSdkVersion, minSdkVersion, dan targetSdkVersion
- All the Things Compat
- Referensi API(semua paket yang dimulai dengan android.support)