Cari Blog Ini

Senin, 08 Januari 2018

Membuat dan Menjalankan Aplikasi Android Pertama

Latihan Pertama
Codelab ini bertujuan untuk mengimplementasikan komponen Activity pada aplikasi pertama yang anda bangun sehingga dapat memberikan gambaran tentang bagaimana Activity ditampilkan. Kemudian anda memberikan Interaksi di dalamnya seperti memberi input dan mengklik sebuah tombol.

Logika Dasar
Melakukan input ke dalam obyek TextBox → Melakukan validasi input → Melakukan perhitungan volume balok ketika tombol hitung diklik

Codelab Perhitungan Volume

  1. Buat Project Baru dengan klik File -> New -> New Project... pada Android Studio anda
    20160921142131d629afd5ba33609f537963ff60
  2. Setelah muncul Jendela Create New Project, kemudian atur nama aplikasi dan domain perusahaan/website anda. Sebaiknya jangan sama dengan apa yang ada dicontoh. Dan jangan lupa pula untuk menentukan lokasi project.
    20160921142152eb03ef125a0907edf9d6249d52
  3. Kemudian pilih tipe device untuk aplikasi beserta target minimum SDK yang akan kita gunakan. Pilihan target Android SDK yang kita pilih akan mempengaruhi banyaknya device yang bisa menggunakan aplikasi  buatan kita. Disini kita pilih untuk tipe device Phone and Tablet dengan minimum SDK diset ke Level 15 (Ice Cream Sandwich)/  Klik Next untuk melanjutkan.
    20160921142213b4205f387faf82414681bd581a
  4. Pada bagian ini kita akan memilih tipe Activity awal dari template yang telah disediakan.  Saat ini Android Studio sudah menyediakan berbagai macam template Activity dari yang paling sederhana hingga yang paling kompleks seperti :
    Add No Activity                           : Tidak ada Activity yang ditambahkan
    Basic Activity                               : Activity dengan template komponen material design seperti FloatingActionButton
    Empty Activity                             : Activity dalam bentuk yang paling dasar
    Fullscreen Activity                     : Activity fullscreen tanpa status bar
    Google AdMob Ads Activity   : Activity dengan default konfigurasi iklan Admob
    Google Maps Activity                : Activity dengan menyediakan konfigurasi dasar Google Maps
    Login Activity                               : Activity untuk halaman login
    Master / Detail Flow                  : Activity yang diperuntukan untuk alur aplikasi Master Detail pada device tablet
    Navigation Drawer Activity   : Activity dengan tampilan side bar menu
    Scrolling Activity                        : Activity dengan kemampuan Scroll konten didalamnya secara vertical
    Settings Activity                         : Activity yang diperuntukan untuk Konfigurasi Aplikasi
    Tabbed Activity                      : Activity yang diperuntukan untuk menampilkan lebih dari satu tampilan, dapat digeser ke kanan dan ke kiri (Swipe) dan dengan menggunakan komponen ViewPager
    20160921142236d5f7d2cd4c994be79924d198e0
    Saat ini kita pilih tipe Empty Activity, klik Next untuk melanjutkan.

  5. Selanjutnya, tentukan nama Activity pertama kita, saat ini kita biarkan pada kondisi apa adanya. Ingat, jika suatu saat nanti kita ingin melakukan penambahan Activity, best practice nya adalah dengan menambahkan Activity setelah kata nama kelas yang akan kita buat. Misal: ProfileActivity, SettingsActivity dan lain sebagainya. Klik Finish untuk menyelesaikan.
    2016092114231133c6ef2cf735a7dab43e4f2c51
  6. Selamat!, Anda telah berhasil membuat sebuah project baru Android. Layar anda pasti akan seperti dibawah ini:
    201609211423383514d861abb7c31580e838ff9b
  7. Di sebelah kanan anda adalah workspace dimana Activity anda berada dan bernama MainActivity.java dengan layoutnya activity_main.xml. Di sebelah kiri anda terdapat struktur project anda dimana nanti kita akan banyak menambahkan berbagai komponen, asset dan library. Untuk lebih mengenal Android Studio lebih dalam silakan baca materi ini https://developer.android.com/studio/intro/index.html

Selanjutnya kita akan mulai melakukan pengkodean aplikasi atau lebih enaknya disebut ngoding. Berikut flow umumnya.
Ngoding Layout untuk User Interface aplikasi
Ngoding Activity untuk menambahkan logika aplikasi

Jangan ngetik saja atau ngoding polos, Gunakan ctrl + space untuk menggunakan code completion dari Android Studio agar mengoptimasi import package dari komponen yang digunakan.
Dilarang Keras untuk copy - paste! Ngoding pelan-pelan akan membuat anda lebih jago di masa depan.


Selamat ngoding!

Menambahkan Code Sederhana pada Layout Activity

  1. Silahkan klik tab file activity_main.xml pada workspace anda (res/Layout/activity_main.xml), dan silakan ikuti baris-baris berikut:
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2.     xmlns:tools="http://schemas.android.com/tools"
    3.     android:layout_width="match_parent"
    4.     android:layout_height="match_parent"
    5.     android:paddingBottom="@dimen/activity_vertical_margin"
    6.     android:paddingLeft="@dimen/activity_horizontal_margin"
    7.     android:paddingRight="@dimen/activity_horizontal_margin"
    8.     android:paddingTop="@dimen/activity_vertical_margin"
    9.     android:orientation="vertical"
    10.     tools:context="com.dicoding.associate.barvolume.MainActivity">
    11.     <TextView
    12.         android:layout_width="match_parent"
    13.         android:layout_height="wrap_content"
    14.         android:text="Panjang"
    15.         android:layout_marginBottom="@dimen/activity_vertical_margin"/>
    16.     <EditText
    17.         android:id="@+id/edt_length"
    18.         android:layout_width="match_parent"
    19.         android:layout_height="wrap_content"
    20.         android:inputType="numberDecimal"
    21.         android:lines="1"
    22.         android:layout_marginBottom="@dimen/activity_vertical_margin"/>
    23.     <TextView
    24.         android:layout_width="match_parent"
    25.         android:layout_height="wrap_content"
    26.         android:text="Lebar"
    27.         android:layout_marginBottom="@dimen/activity_vertical_margin"/>
    28.     <EditText
    29.         android:id="@+id/edt_width"
    30.         android:layout_width="match_parent"
    31.         android:layout_height="wrap_content"
    32.         android:inputType="numberDecimal"
    33.         android:lines="1"
    34.         android:layout_marginBottom="@dimen/activity_vertical_margin"/>
    35.     <TextView
    36.         android:layout_width="match_parent"
    37.         android:layout_height="wrap_content"
    38.         android:text="Tinggi"
    39.         android:layout_marginBottom="@dimen/activity_vertical_margin"/>
    40.     <EditText
    41.         android:id="@+id/edt_height"
    42.         android:layout_width="match_parent"
    43.         android:layout_height="wrap_content"
    44.         android:inputType="numberDecimal"
    45.         android:lines="1"
    46.         android:layout_marginBottom="@dimen/activity_vertical_margin"/>
    47.     <Button
    48.         android:id="@+id/btn_calculate"
    49.         android:layout_width="match_parent"
    50.         android:layout_height="wrap_content"
    51.         android:text="Hitung"
    52.         android:layout_marginBottom="@dimen/activity_vertical_margin"/>
    53.     <TextView
    54.         android:id="@+id/tv_result"
    55.         android:layout_width="match_parent"
    56.         android:layout_height="wrap_content"
    57.         android:text="Hasil"
    58.         android:gravity="center"
    59.         android:textSize="24sp"
    60.         android:textStyle="bold"
    61.         android:layout_marginBottom="@dimen/activity_vertical_margin"/>
    62. </LinearLayout>
  2. Akan muncul warning pada attribut android:text pada layout tersebut. Ini disebabkan karena kita hardcode code string kita. Mari kita hilangkan code warning tersebut dengan menekan alt+enter pada attribut android:text. Akan muncul dialog seperti ini, pilihlah extract string resource.
  3. Kemudian akan muncul dialog seperti dibawah ini, sesuaikan dengan nama yang ada.
  4. Fungsi extract string resource akan secara otomatis menambahkan values dalam android:text ke dalam file res → values → strings.xml. Tambahkan juga pada view lainnya hingga tidak ada warning lagi. Jika kita buka files strings.xml akan seperti ini.
    1. <resources>
    2.     <string name="app_name">BarVolume</string>
    3.     <string name="lebar">Lebar</string>
    4.     <string name="tinggi">Tinggi</string>
    5.     <string name="hitung">Hitung</string>
    6.     <string name="hasil">Hasil</string>
    7.     <string name="panjang">panjang</string>
    8. </resources>

  5. Jika terjadi error pada attribut dimens, maka kita perlu menambahkan file dimens.xml di dalam res → values → dimens.xml. Error ini disebabkan karena pada Android Studio 2.3 file dimens.xml sudah tidak di generate secara otomatis ketika sebuah project dibuat. Langsung saja tambahkan dengan cara klik kanan pada directory res. Akan muncul dialog seperti ini.
  6. Kemudian isikan sesuai di bawah ini.
  7. Jika file dimens.xml sudah terbuat, sesuaikan isi dari dimens.xml menjadi seperti berikut.
    1. <resources>
    2.     <!-- Default screen margins, per the Android Design guidelines. -->
    3.     <dimen name="activity_horizontal_margin">16dp</dimen>
    4.     <dimen name="activity_vertical_margin">16dp</dimen>
    5. </resources>

Menambahkan Kode Logika Sederhana pada MainActivity
  1. Selanjutnya setelah selesai, lanjutkan dengan membuka file MainActivity.java dan lanjutkan ngoding baris-baris dibawah ini.
    1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    2.     private EditText edtWidth, edtHeight, edtLength;
    3.     private Button btnCalculate;
    4.     private TextView tvResult;
    5.  
    6.     @Override
    7.     protected void onCreate(Bundle savedInstanceState) {
    8.         super.onCreate(savedInstanceState);
    9.         setContentView(R.layout.activity_main);
    10.         edtWidth = (EditText)findViewById(R.id.edt_width);
    11.         edtHeight = (EditText)findViewById(R.id.edt_height);
    12.         edtLength = (EditText)findViewById(R.id.edt_length);
    13.         btnCalculate = (Button)findViewById(R.id.btn_calculate);
    14.         tvResult = (TextView)findViewById(R.id.tv_result);
    15.         btnCalculate.setOnClickListener(this);
    16.     }
    17.  
    18.     @Override
    19.     public void onClick(View v) {
    20.         if (v.getId() == R.id.btn_calculate){
    21.             String length = edtLength.getText().toString().trim();
    22.             String width = edtWidth.getText().toString().trim();
    23.             String height = edtHeight.getText().toString().trim();
    24.             boolean isEmptyFields = false;
    25.             if (TextUtils.isEmpty(length)){
    26.                 isEmptyFields = true;
    27.                 edtLength.setError("Field ini tidak boleh kosong");
    28.             }
    29.             if (TextUtils.isEmpty(width)){
    30.                 isEmptyFields = true;
    31.                 edtWidth.setError("Field ini tidak boleh kosong");
    32.             }
    33.             if (TextUtils.isEmpty(height)){
    34.                 isEmptyFields = true;
    35.                 edtHeight.setError("Field ini tidak boleh kosong");
    36.             }
    37.             if (!isEmptyFields) {
    38.                 double l = Double.parseDouble(length);
    39.                 double w = Double.parseDouble(width);
    40.                 double h = Double.parseDouble(height);
    41.                 double volume = l * w * h;
    42.                 tvResult.setText(String.valueOf(volume));
    43.             }
    44.         }
    45.     }
    46. }
    Jika terdapat baris merah seperti ini :
    20161102141918869392faea0b2f67cbd342920f
    Jangan khawatir, silakan klik keatas baris merah tersebut dan silakan klik pada icon  atau dengan tekan tombol (Alt + Enter)lalu pilih implements method
  2. Setelah sudah selesai silakan jalankan aplikasi dengan mengklik  atau Run → Run ‘app’ dari menu bar. Kemudian ada pilihan seperti ini.
    20160922215004db61b1ec6b5ed6c0d67cfbe35f

    Itu tandanya adb (Android Debugger) device yang anda punya telah terkoneksi dengan Android Studio. Jika anda tidak memiliki device silakan gunakan emulator. Ikuti materinya disini https://developer.android.com/studio/run/managing-avds.html.

    Kami merekomendasikan anda menggunakan device Android sewaktu develop aplikasi di Android. Selain karena akan menghemat penggunaan memori dari device yang anda gunakan, juga akan memberikan pengalaman yang berbeda dengan menjalankan aplikasi di device anda sendiri. Pilih OK untuk menjalankan dan tunggu hingga proses building dan instalasi apk aplikasi anda berjalan. Jika sudah, seharusnya hasilnya akan seperti ini.
    Silakan masukan nilai panjang, lebar dan tinggi kemudian tekan tombol Hasil dan whoilla hasilnya akan ditampilkan di obyek TextView tvHasil.
    android_activity_calculator.gif

  3. Selesai? Belum, masih ada yang kurang , ketika setelah menghitung luas dan kemudian terjadi pergantian orientasi pada device maka hasil perhitungan akan hilang. Tambahkan beberapa baris berikut pada MainActivity.java
    1. private static final String STATE_HASIL = "state_hasil";
    2.  
    3. @Override
    4. protected void onSaveInstanceState(Bundle outState) {
    5.  
    6.     outState.putString(STATE_HASIL, tvResult.getText().toString());
    7.     super.onSaveInstanceState(outState);
    8. }
    Kemudian tambahkan juga beberapa baris berikut pada baris terakhir method onCreate
    1. if (savedInstanceState != null){
    2.     String hasil = savedInstanceState.getString(STATE_HASIL);
    3.     tvResult.setText(hasil);
    4. }
  4. Silakan jalankan aplikasi kembali kemudian coba lakukan perhitungan dan ganti orientasi device. Jika sudah benar maka hasil perhitungan akan dijaga. 

Bedah Kode

Pembahasan tentang layout xml

  1. xml version="1.0" encoding="utf-8"?>  => 
Baris ini mengidentifikasi bahwa file ini berformat xml.
  1. xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
Merupakan namespace yang digunakan dalam keseluruhan file xml ini.
  1. tools:context="com.dicoding.associate.barvolume.MainActivity" 
Mengidentifikasi bahwa file layout xml ini berelasi dengan MainActivity.

Disini kita menggunakan beberapa komponen user interface yang disebut View diantaranya:
TextView             : Komponen View untuk menampilkan teks ke layar
EditText               : Komponen View untuk memberikan input teks
Button                  : Komponen View untuk melakukan sebuah aksi dengan mengklik
LinearLayout     : Komponen View bertipe ViewGroup yang menjadi parent dari semua sub komponen View (Sub View) didalamnya. Komponen ini bersifat sebagai kontainer untuk komponen lain dengan susunan secara Vertikal atau Horizontal.
Cara membaca :
  1.  <TextView
  2.     android:layout_width="match_parent"
  3.     android:layout_height="wrap_content"
  4.     android:text="Panjang"
  5.     android:layout_marginBottom="@dimen/activity_vertical_margin"/>
Komponen diatas adalah sebuah TextView, warna ungu menandakan namespace yang digunakan, warna biru adalah atribut dari komponen dan warna hijau adalah nilai dari atribut. Penjelasannya seperti dibawah ini:
2016110214142154500af4d8d662f855314a704a


20161102141427e71b0d44f5baef3f1395940442
match_parent: Ini berarti bahwa ukuran dimensi sebuah View disesuaikan dengan ukuran layar secara horizontal jika pada layout_width dan vertikal jika pada layout_height.
wrap_content : Ini berarti bahwa ukuran dimensi sebuah View disesuaikan dengan ukuran konten didalamnya baik secara horizontal pada layout_width dan vertikal jika pada layout_height.
@dimen/activity_vertical_margin: Value activity_vertical_margin berasal dari file resource dimens.xml yang bisa anda lihat dengan cara menekan dan tahan tombol ctrl (atau command) + arahkan kursor keatasnya dan kemudian klik sekali. Penggunaan centralize resource value akan memudahkan anda sewaktu developmen aplikasi Android. Penggunaan cara tersebut supaya tidak menulis value yang sama berulang-ulang.
201611021414538b2ed67349af5a7680319df862
Apa itu ‘@+id/’ ? 
Salah satu contoh penerapan penggunaan @+id/ sebagai berikut:
  1. <Button
  2.     android:id="@+id/btn_calculate"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="wrap_content"
  5.     android:text="Hitung"
  6.     android:layout_marginBottom="@dimen/activity_vertical_margin"/>
Penjelasannya sebagai berikut:
  1. android:id="@+id/btn_calculate"
Jika kita memberikan id pada sebuah View maka kita telah memberikan identifier untuk View tersebut agar:
Bisa kita manipulasi/dikontrol pada level logic di komponen seperti Activity atau Fragment. ID ini akan diciptakan di file R.javakedalam bentuk nilai hexa bertipe data Integer à public static final int btn_calculate=0x7f0b0057;
2016110214161078fb3d968af6fd3f8cfc0dbfe0

Sebagai acuan untuk penyusunan tampilan pada RelativeLayout (akan dibahas pada modul selanjutnya).


Pembahasan tentang Logika Kode
  1. public class MainActivity extends AppCompatActivity 
Menandakan bahwa Kelas Java kita merupakan sebuah Activity karna inherit ke superclass bernama AppCompatActivity
  1. implements View.OnClickListener 
Ini adalah listener yang kita implementasikan untuk melakukan proses event klik pada komponen tombol (button)

Jika terdapat baris merah seperti ini :
Jangan khawatir, silakan klik ke atas baris merah tersebut dan silakan klik pada icon atau dengan tekan tombol (Alt + Enter) lalu pilih implements method

  1. private EditText edtWidth, edtHeight, edtLength;
  2. private Button btnCalculate;
  3. private TextView tvResult;
Deklarasi semua komponen View yang akan dimanipulasi. Kita deklarasikan secara global agar bisa dikenal di keseluruhan bagian kelas.

  1. @Override
  2.    protected void onCreate(Bundle savedInstanceState) {
  3.        super.onCreate(savedInstanceState);
  4.        setContentView(R.layout.activity_main);
  5.        edtWidth = (EditText)findViewById(R.id.edt_width);
  6.        edtHeight = (EditText)findViewById(R.id.edt_height);
  7.        edtLength = (EditText)findViewById(R.id.edt_length);
  8.        btnCalculate = (Button)findViewById(R.id.btn_calculate);
  9.        tvResult = (TextView)findViewById(R.id.tv_result);
  10.        btnCalculate.setOnClickListener(this);
  11.    }
Method onCreate() merupakan method utama pada Activity. Di sinilah kita dapat mengatur layout xml dan semua proses inisialisasi komponen yang akan digunakan diciptakan. Pada method ini kita casting semua komponen View yang kita telah deklarasikan sebelumnya, agar dapat kita manipulasi.

  1. setContentView(R.layout.activity_main);
Maksud baris diatas adalah bahwa kelas MainActivity akan menampilkan tampilan yang berasal dari layout activity_main.xml
  1. edtWidth = (EditText)findViewById(R.id.edt_width);
Maksud dari baris diatas adalah obyek EditText edtWidth disesuaikan (Cast) dengan komponen EditText ber-ID edt_width di layout xml melalui method findViewById()

  1. btnCalculate.setOnClickListener(this); 
Set Event Click Listener untuk obyek btnCalculate sehingga dapat melakukan sebuah aksi ketika pengguna melakukan Klik. Keyword this menekankan pada obyek Activity saat ini yang telah mengimplementasikan listener OnClickListener sebelumnya.  

Pembahasan saveInstanceState 
  1. @Override
  2. protected void onSaveInstanceState(Bundle outState) {
  3.  
  4.     outState.putString(STATE_HASIL, tvResult.getText().toString());
  5.     super.onSaveInstanceState(outState);
  6. }
Perhatikan pada method onSaveInstanceState, didalam method ini hasil perhitungan yang ditampilkan pada tvResult dimasukkan pada bundle kemudian di save isinya. Setelah onSaveInstanceState berhasil dijalankan maka activity akan melakukan proses onDestroy dan menjalankan lagi  OnCreate secara otomatis.
  1. if (savedInstanceState != null){
  2.     String hasil = savedInstanceState.getString(STATE_HASIL);
  3.     tvResult.setText(hasil);
  4. }
Pada onCreate inilah kita menggunakan nilai bundle yang telah kita simpan tadi pada onSaveInstanceState kemudian kita isikan kembali pada tvResult.

Selamat! Anda telah berhasil membuat dan menjalankan aplikasi android pertama di device atau emulator.

1 komentar:

  1. Mantap Gan, terimakash sudah mau mau berbagi ilmu, oh ya perkenalkan nama saya yuli suseno, jika berkenan mampir yan gan ke web kampus kami di kampus ISB Atma Luhur.terima kasih

    BalasHapus