Aplikasi yang membuat HP bisa Ngomong

Sejak android 1.6 telah ada TTS(text to speech) engine dalam android sistim. TTS adalah engine suara manusia yang bisa membaca apa saja yang tertulis di layar HP. Saya sangat tertarik karena teknologinya sederhana untuk di implementasikan namun akan sangat berpengaruh besar bagi mereka yang ingin belajar bahasa inggris sendiri(tanpa guru).
Di lain pihak, guru2 bahasa inggris di Indonesia kebanyakan sangat pintar dalam hal grammar, bahkan melebihi mereka yang lahir dan di besarkan di Inggris. Di Indonesia masih membutuhkan banyak guru bahasa Inggris yang pandai dalam pronunciation(begitukah tulisan-nya?)... mudah2-an aplikasi kecil ini bisa membantu bagi yang perlu di bantu.


Untuk membangun aplikasi ini tak terlalu rumit karena tidak banyak user interface(UI)-nya.
Pada gambar di atas saya hanya membutuhkan 4 buah UI ... 2 di antaranya yaitu nama aplikasi 'Hp_Bisa_Ngomong' dan tulisan  paling bawah pada layar di gambar di atas, keduanya adalah tidak ada logika programnya. Yang ada logika programnya adalah hanya kotak tempat untuk ketik kata-kata inggris... dan tombol 'Baca' yang berguna untuk menyuruh HP membaca apa yang kita tulis
Silahkan baca2 disini untuk konsep UI dengan xml

Berikut adalah main.xml sebagai tampang depan dari aplikasi ini agar terlihat seperti gambar di atas. Tapi sebagai UI designer anda boleh design yang lebih indah dari yang saya buat di atas. Di sini saya hanya berkepentingan pada cara kerjanya saja daripada tampangnya.

 <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
android:orientation="vertical" >

<edittext 
android:id="@+id/tempat_ketik" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:text="">
</edittext> 

<button 
android:id="@+id/untuk_di_pencet" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/baca">
</button>

<textview 
android:id="@+id/pesan" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/pesan" 
android:textsize="15sp">
</textview>
</linearlayout>
Kog cuma tiga object?... anda benar, walau di layar terlihat 4 object, tapi di kode xml di atas cuma ada 3 obyek yaitu 'tempat_ketik' yang di buat dari widget bernama EditText, dan tombol 'untuk_di_pencet' di buat dari widget yang bernama 'Button', serta 'pesan di buat dari widget 'TextView'
Sedangkan nama aplikasinya Hp_bisa_ngomong akan di pasang di halaman 'strings.xml' melalui 'AndroidManifest.xml'

AndroidManifest adalah spesial untuk android struktur, di AndroidManifest akan di tempatkan printah2 yang mencakup 'application wide'. Saya tidak tahu apa bahasa indonesia yang cocok untuk 'application wide' tapi yang saya maksudkan di sini adalah printah2 android yang menyangkut aspek menyeluruh dan menyangkut pengaruh aspek luar dari sebuah aplikasi. Aspek luar misalnya koneksi ke internet... aspek luar juga termasuk logo dan nama aplikasi dan banyak lagi aspek luar lainnya tapi di luar scope tulisan ini. Yang jelas bahwa semua aspek seperti itu akan di pasang di halaman androidManifest.
Logo dan nama aplikasi di pasang di AndroidManifest (sebagai aspek luar) karena keduanya bisa menempatkan diri di tempat2 berbeda pada folder di dalam HP, misalnya sebuah aplikasi berada di sebuah folder A atau di foder B tapi aplikasi tersebut bisa juga di drag dan di drop di halaman depan(Homepage). Yang di drag dan drop itu adalah logo dan nama aplikasi, bukan seluruh aplikasi, nanti logo dan nama aplikasi bikin back link sendiri ke aplikasinya. Kalau aplikasinya yang harus di drag maka helaman depan hanya di penuhi satu aplikasi saja, itupun bahkan tak cukup.

Berikut adalah isi dari AndroidManifest.xml untuk aplikasi ini
 
<manifest 
android:versioncode="1" 
android:versionname="1.0" 
package="com.vik_sintus.projects.hpNgomong" xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-sdk android:minsdkversion="4" android:targetsdkversion="1.6"></uses-sdk>

    <application android:icon="@drawable/logotts" android:label="@string/app_name">
        <activity android:label="@string/app_name" android:name=".HpBisaNgomong">
            <intent-filter>
                <action android:name="android.intent.action.MAIN">

                <category android:name="android.intent.category.LAUNCHER">
            </category></action></intent-filter>
        </activity>
    </application></manifest> 
Android:versionCode dan android:versionName berguna untuk rekam jikalau ada aplikasi versi baru untuk dapat di download oleh pengguna, sehingga ia otomatis menghapus versi lama dan di ganti versi baru tanpa membebani resource HP pengguna. Tentunya ketika membuat versi baru, developer harus ingat untuk ganti nama atau nomor yang terkandung dalam kedua object tsb.

android:minSdkVersion dan android:targetSdkVersion untuk tingkatan2 android apa saja yang menjadi tujuan aplikasi yang kita bangun. Sebagai acuan, ushakan untuk memilih android yang paling tua sebagai sasaran, karena jikalau aplikasinya bisa bekerja di android tua bangka maka akan bekerja pula di android moderen.
Hanya saja android versi lama tidak ada (kurang) hal yang mewah2 seperti screen hidup dan hal mewah lain-nya, namun proses kerja mendasar di antara android lama dan android baru masih sama. Jadi kalau mau develop aplikasi mewah maka harus pakai android versi baru pula dan memaksa pengguna untuk meninggalkan android versi lama dan membeli yang versi baru(tegahnya di kau).

@drawable/logotts katakan pada android bahwa logo yang bernama logotts berada di(@) folder yang bernama drawable. Proses memilih nama harus memiliki logika anda sendiri yah, logotts(logoTextToSpeech) adalah logika saya sendiri karena saya punya banyak logo maka logo yang ini saya sebut 'logotts'

android:label="@string/app_name" ada dua android lable, satunya di bagian aplication dan yang lain berada di activity. Yang berada aplication akan muncul di luar layar HP, sedangkan yang lain akan muncul di dalam layar HP bersama logonya.
 @string/app_name adalah untuk menunjukan kepada android di mana tempat simpan app_name, dalam hal ini ia berada di(@) file yang bernama strings.xml

android:name=".HpBisaNgomong" adalah nama class utama yang bekerja untuk melakukan aktivitas utama agar bekerja denagn logika untuk mencapai tujuan pembuatan aplikasi ini, itulah sebabnya mengapa dia berada dalam tag activity

<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> keduanya adalah printah internal tak perlu di pikirin untuk sekarang.

Pada halaman main.xml di atas ada beberapa bagian yang mengarahkan ke @string itu maksudnya bahwa isinya berada di halaman strings.xml oleh karena itu maka kita harus membuat halaman strings.xml sbb:


    Hp_Bisa_Ngomong!
    silahkan tulis kata-kata bahasa inggris yang mau di baca oleh hp pada kotak di atas,
         dan tekan tombol Baca. Agar terdengar lebih jelas silahkan letakan koma di antara kata-kata 
     Baca    

Perhatikan ketiga string object yang pada kode di atas, ketiganya muncul di layar HP... self explanatory-lah....sampai disini maka selesailah suadah pembuatan tampang/UI dari aplikasi ini

Sekarang mari kita membangun cara kerja dan logika di balik aplikasi ini dengan menulis sebuah class utama yang bekerja sebagai otak untuk menjalankan aplikasi.
Sesuai nama aplikasi maka saya akan menamakan class utamanya HpBisaNgomong.java
Kita tidak perlu tulis banyak kode java untuk membuat HpBisaNgomong agar dapat bekerja dengan baik, hal tersebut sangat membantu orang seperti saya yang masih rabun dengan logika java.
Untuk membangun aplikasi ini kita hanya mengimport, mendeklarasikan dan mengimplementasikan kode java dan class java yang telah ada di setiap HP yang menggunakan android sistim. Banyak class didalam sistim android yang duduk manis, menunggu kalau suatu hari ada yang ingin mengimplementasikan-nya.... tapi itulah kendalanya, kita/saya tidak tahu banyak bagaimana untuk mengimplementasikan-nya. ... belajar jalan terus man

Class utama yang membuat HP android bisa membaca adalah bernama TextToSpeech , jadi kita tinggal deklarasikan TextToSpeech dan dua objects lain seperti terlihat pada gambar di atas. Dua benda lain itu adalah sebuah kotak untuk isi tulisan dan sebuah tombol yang saya beri nama 'Baca'.

class HpBisaNgomong.java ini juga butuh gandengan dengan class Activity serta mengimplementasikan class OnInitListener

package com.vik_sintus.projects.hpNgomong;

public class HpBisaNgomong extends Activity implements OnInitListener {
    
    private int KODE_UNTUK_PRIKSA_TTS = 0;
    private TextToSpeech hpMembaca;
    private EditText kata_kata_yg_mau_di_baca;
    private Button tombol;
/** kode java selengkapnya akan di tempatkan di sini */
Selain deklarasi 3 obyek utama yang kita butuhkan , aplikasi ini juga membutuhkan satu data bertipe integer(int) untuk melakukan pengecekan terhadap data di dalam kata_kata_yang_mau_di_baca

Kode di atas berisikan beberapa class siluman, antara lain Activity, OnInitListener,  TextToSpeech, EditText,  Button. Di sebut siluman karena tak jelas sumbernya darimana, oleh karena itu maka kode tersebut akan di anggap salah oleh API (ada warning-salah). Dan untuk menjadi benar maka class siluman itu harus di import terlebih dahulu ke dalam halaman HpBisaNgomong.java  agar ia dapat di konstruksi lebi lanjut.
Kode java akan menjadi benar dan nampak sbb, setelah class-class siluman itu terimport
package com.vik_sintus.projects.hpNgomong;

import android.app.Activity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.widget.Button;
import android.widget.EditText;

public class HpBisaNgomong extends Activity implements OnInitListener {
    
    private int KODE_UNTUK_PRIKSA_TTS = 0;
    private TextToSpeech hpMembaca;
    private EditText kata_kata_yg_mau_di_baca;
    private Button tombol;
/** kode java selengkapnya akan di tempatkan di sini */
Setelah deklarasi semua obyek-obyek yang kita butuhkan di class ini, maka di lanjutkan dengan memulai proses kerja java, dengan cara ciri khas android
@Override
 public void onCreate(Bundle savedInstanceState) {
    
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  kata_kata_yg_mau_di_baca = (EditText) findViewById(R.id.tempat_ketik);
  tombol = (Button) findViewById(R.id.untuk_di_pencet);

Silahkan baca tentang @override di http://docs.oracle.com/javase/tutorial/java/javaOO/annotations.html

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adalah cara android untuk membuat sesuatu. Disini android menyatakan, hey ketika membuat/menunjukan aplikasi ke layar HP tunjukan isinya menggunakan main.xml yang berlokasi R.layout.main .
 Kotak yang telah saya deklarasikan bernama kata_kata_yg_mau_di_baca adalah terbuat dari widget  EditText dapat di temukan di file R dan beridentitas tempat_ketik.

Perlu di ketahui bahwa kita sedang berbicara menjelaskan tujuan kita membuat aplikasi kepada komputer. Berbeda dengan manusia yang punya logika, komputer memang pintar tapi ia tak punya logika iapun bisu, tuli dan tak punya perasaan. Oleh karena itu kita harus jelaskan kepadanya sejelas-jelasnya sampai dia paham apa yang kita maksudkan.

Oh mister komputer yang bisu, tuli dan tak punya perasaan, masih ingatkah engkau private Button tombol yang telah saya deklarasikan sebelumnya? tombol yang saya maksudkan adalah seperti tombol = (Button) findViewById(R.id.untuk_di_pencet); yaitu tombol yang terbuat dari widget Button, please...mr komputer silahkan melihatnya di file R yang identitas-nya untuk_di_pencet
Setelah susah paya untuk menjelaskan itu kepada mister komputer eeehhh, belaiu masih juga tak paham tombol itu di pakai untuk apa?.... iyalahhh untuk di pencet dong. Sebelum selesai di jawab, mr komputernya bertanya, tombol-nya sudah siap di pencet enggak?
jadi sebelum menyuruh mr komputer untuk pencet tombol maka kita harus siapkan tombolnya agar terlihat hidup ketika di sentuh dan telah siap untuk di pencet.berikut adalah kode untuk membuat tombol siap dan bersedia di pencet  tombol.setOnClickListener(new OnClickListener() dan sebelum mr komputer bertanya untuk apa tombol di pencet maka kita siapkan ini

@Override
public void onClick(View v) {
String kata_kata = kata_kata_yg_mau_di_baca.getText().toString();
if (kata_kata!=null && kata_kata.length()>0) {
Toast.makeText(HpBisaNgomong.this, "Ia baca: " + kata_kata, Toast.LENGTH_LONG).show();
hpMembaca.speak(kata_kata, TextToSpeech.QUEUE_ADD, null);
}
}
});
Kode di atas mengatakan, pada waktu pencet tombol, ambill kata-kata dari dalam kata_kata_yang_mau_di_baca dan di ubah jadi string agar mudah di proses lebih lanjut. Dan kalau kata_kata adalah bukan kosong dan atau jikalau panjang(jumlah) kata-kata lebih besar dari nol maka tunjukan pesan pop-up seperti kode berikut.
Toast.makeText(HpBisaNgomong.this, "Ia baca: " + kata_kata, Toast.LENGTH_LONG).show();
hpMembaca.speak(kata_kata, TextToSpeech.QUEUE_ADD, null);

Pada waktu suara HP membaca tulisan,  pada waktu hampir bersamaan pula pop-up akan muncul dengan menunjukan tulisan yang sama pula . Ini cukup penting untuk menjaga kemungkinan jangan sampai HP-nya membaca sesuatu yang bukan kata-kata yang kita ketik. Hal itu bisa saja menunjukan ada bug di aplikasi, tapi aplikasi kecil seperti ini hampir tak mungkin ada bug.

Sebelum saya lupa ada baiknya saya pasang dulu penggalan kode di atas kedalam HpBisaNgomong.java dan import semua class-calss yang di butuhkan

package com.vik_sintus.projects.hpNgomong;

import java.util.Locale;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class HpBisaNgomong extends Activity implements OnInitListener {
    
    private int KODE_UNTUK_PRIKSA_TTS = 0;
    private TextToSpeech hpMembaca;
    private EditText kata_kata_yg_mau_di_baca;
    private Button tombol;
 
@Override
public void onCreate(Bundle savedInstanceState) {
    
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  kata_kata_yg_mau_di_baca = (EditText) findViewById(R.id.tempat_ketik);
  tombol = (Button) findViewById(R.id.untuk_di_pencet);
tombol.setOnClickListener(new OnClickListener() {            
   @Override
   public void onClick(View v) {
       String kata_kata = kata_kata_yg_mau_di_baca.getText().toString();
       if (kata_kata!=null && kata_kata.length()>0) {
    Toast.makeText(HpBisaNgomong.this, "Ia baca: " + kata_kata, Toast.LENGTH_LONG).show();
    hpMembaca.speak(kata_kata, TextToSpeech.QUEUE_ADD, null);
       }
   }
      });
/** kode java selengkapnya akan di tempatkan di sini */
Warning: komputer adalah, buta,tuli dan mati rasa.
Sejauh ini sudah pusing jelasin berbagai langkah agar aplikasi kita bisa berjalan, tapi komputer masih juga mau tanya emangnya tujuan buat aplikasi ini untuk apa? maka untuk itu mari kita jelaskan lagi kepada yang mulia mr komputer.
Oleh karena mr komputer tanya tujuan maka kita perlu jasa class Intent untuk menjelaskan hal itu kepadanya. Kebetulan intent dan tujuan, secara literal adalah sama.
Intent priksa_TTS = new Intent();
      priksa_TTS.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
      startActivityForResult(priksa_TTS, KODE_UNTUK_PRIKSA_TTS);
        
    }
Kode di atas menjelaskan kepada mr komputer bahwa kita ingin dengar_textospeech_di_hp. yaitu mendengar apa yang di lihat oleh TextToSpeech Engine di dalam kotak data(kata-kata_yang_mau_di_baca) tentunya setelah engine check kebenaran dan keberadaan-nya di dalam kotak tsb dengan kode:
dengar_tts_di_hp.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA)

Metode onActivityResult berikut adalah bekerja persis seperti namanya yaitu memeriksa hasil dari activity, jikalau kata-kata yang di ambil dari dalam kotak adalah benar, dan kebenaran-nya telah di cek dengan TextToSpeech.Engine.CHECK_VOICE_DATA_PASS maka buatlah instance untuk mesin TTS. Tapi kalau ada kesalahan dengan berbagai alasan, maka silahkan di_pasang_lagi tujuan(Intent) dari aplikasi ini
@Override
protected void onActivityResult(int ambilKataKata, int hasilDariKataKata, Intent data) {
        if (ambilKataKata == KODE_UNTUK_PRIKSA_TTS) {
            if (hasilDariKataKata == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
                // kalau kode priksa berhasil, maka buatlah instance tts 
                hpMembaca = new TextToSpeech(this, this);
            } 
            else {
                // kalau datanya hilang dgn berbagai alasan, maka data tts di pasang lagi
                Intent di_pasang_lagi = new Intent();
                di_pasang_lagi.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                startActivity(di_pasang_lagi);
            }
        }

    }
Kode berikut untuk memasang kondisi2 lain dari aplikasi
Kalau kondisinya sukses maka tinggalkan pesan sukses, kalau tidak maka tinggalkan pesan sebaliknya.
Selain untuk priksa kondisi, metode onInit adalah juga tempat untuk memasang bahasa apa yang ingin di bacakan oleh HP anda. Pada aplikasi ini saya pasang bahasa Inggris UK dengan kode hpMembaca.setLanguage(Locale.UK); Bahasa lain yang di dukung oleh aplikasi ini adalah Prancis, Jerman, Italia, spanyol
@Override
 public void onInit(int kondisi) { 
  hpMembaca.setLanguage(Locale.UK);
     if (kondisi == TextToSpeech.SUCCESS) {
       Toast.makeText(HpBisaNgomong.this, 
         "TextToSpeech engine_nya telah di pasang", Toast.LENGTH_LONG).show();
        }
        else if (kondisi == TextToSpeech.ERROR) {
            Toast.makeText(HpBisaNgomong.this, 
                    "walah ada kesalahan saat pasang TextToSpeech engine", Toast.LENGTH_LONG).show();
        }
    }

Berikut adalah keseluruhan dari kode HpBisaNgomong.java

package com.vik_sintus.projects.hpNgomong;

import java.util.Locale;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
/** tak boleh menggunakan kode ini untuk meraup keuntungan, 
 kecuali di bagi dengan saya wakkkkaakk... seriously boleh pakai
 untuk kepentingan sharing ilmu...kalau ada yang protes
  silahkan protes ke vik.sintus@gmail.com */
public class HpBisaNgomong extends Activity implements OnInitListener {
    
    private int KODE_UNTUK_PRIKSA_TTS = 0;
    
    private TextToSpeech hpMembaca;
    
    private EditText kata_kata_yg_mau_di_baca;
    private Button tombol;
    
 @Override
 public void onCreate(Bundle savedInstanceState) {
    
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  kata_kata_yg_mau_di_baca = (EditText) findViewById(R.id.tempat_ketik);
  tombol = (Button) findViewById(R.id.untuk_di_pencet);
  // 1 baris berikut agar tombol dapat di klik
  tombol.setOnClickListener(new OnClickListener() {            
   @Override
   // pada waktu tombol di klik
   public void onClick(View v) {
  // suara akan keluar membaca kata-kata yang ada
       String kata_kata = kata_kata_yg_mau_di_baca.getText().toString();
       if (kata_kata!=null && kata_kata.length()>0) {
  // bersamaan dengan keluarnya suara, kata-kata yang di baca juga akan 
  // muncul sejenak menggunakan jasa widget Toast, mirip dengan pop-up
    Toast.makeText(HpBisaNgomong.this, "Ia baca: " + kata_kata, Toast.LENGTH_LONG).show();
    hpMembaca.speak(kata_kata, TextToSpeech.QUEUE_ADD, null);
       }
   }
      });
  // priksa dulu apakah sudah ada engine TTS di HP
  Intent priksa_TTS = new Intent();
      priksa_TTS.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
      startActivityForResult(priksa_TTS, KODE_UNTUK_PRIKSA_TTS);
        
    }
@Override
protected void onActivityResult(int ambilKataKata, int hasilDariKataKata, Intent data) {
        if (ambilKataKata == KODE_UNTUK_PRIKSA_TTS) {
            if (hasilDariKataKata == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
                // kalau kode priksa berhasil, maka buatlah instance tts 
                hpMembaca = new TextToSpeech(this, this);
            } 
            else {
                // kalau belum ada TTS di HP maka minta di pasang
                Intent pasang_TTS = new Intent();
                pasang_TTS.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                startActivity(pasang_TTS);
            }
        }

    }
// berikut untuk pesan, apakah kondisi pemasangan TTS berhasil atau tidak

    @Override
    public void onInit(int kondisi) { 
     // 1 baris berikut untuk logat inggris
     hpMembaca.setLanguage(Locale.UK);
        if (kondisi == TextToSpeech.SUCCESS) {
            Toast.makeText(HpBisaNgomong.this, 
                    "TextToSpeech engine_nya telah di pasang", Toast.LENGTH_LONG).show();
        }
        else if (kondisi == TextToSpeech.ERROR) {
            Toast.makeText(HpBisaNgomong.this, 
                    "walah ada kesalahan saat pasang TextToSpeech engine", Toast.LENGTH_LONG).show();
        }
    }
    
}

Silahkan install aplikasi ini dari android market

Cara Test Aplikasi Android Di Emulator

Walau kita tak punya uang untuk beli smart phones seperti handphone android, tablet android dll, tapi kita masih bisa melihat dan meng-uji coba cara kerja  aplikasi android yang kita bangun melalui  android emulator yang terkenal dengan nama AVD(android virtual device).
Emulator kata dasarnya adalah emulate yaitu meniru atau (hampir)menyamai benda asli-nya. Melihat beberapa skin(tampang depan) AVD yang di sediakan android yang begitu menyerupai telepon benaran, kadang2 kita merasa bagaikan menggunakan device android benaran. Sentimen itu di dukung oleh kenyataan bahwa kalau kita coba aplikasi buatan kita sendiri di AVD dan bekerja sesuai yang kita rencanakan dan sesuai yang kita butuhkan maka hampir pasti aplikasi tersebut akan berjalan serupa di HP benaran.

Saya sudah coba aplikasi ringan seperti ini  dan hasilnya sama persis antara Emulator dan hp bahkan juga nampak sama di tablet android yang nota bene berlayar besar.

Baris berikut adalah iklan, sorry yah...





Berikut adalah langkah untuk memasang AVD atau emulator di eclipse:


- klik pada Window, AVD Manager, New secara berurutan agar menghasilkan seperti gambar2 berikut

pada gambar di atas saya telah membuat(menyediakan) beberapa emulator sesuai API dan paltform level android, sehingga ketika saya ada latihan membuat applikasi maka saya akan mencoba semua emulator yang ada.

- beri nama di Name pada Create new Android Virtual Device (AVD)
- pilih android level yang sesuai dengan tujuan aplikasi pada Target
- untuk sementara biarkan pembagian SD Cardnya kosong
- silahkan pilih ukuran AVD pada Built-in
- Saya sendiri suka pakai yang HVGA dan QVGA untuk hemat layar
- Biarkan saja Hardware, Property Value-nya default
- klik Create AVD
- nama Virtual Device-nya akan muncul di layar yang bernama Android Virtual Device Manager. Di sana AVD-nya bisa di rombak sesuka hati, seperti Delete, Edit, Repair dll

Berikut adalah langkah2 bagaimana menjalankan aplikasi pada AVD:

1 tekan kanan pada nama aplikasi yang mau di coba di AVD
2 klik Run As, Run Configuration...
3 klik Android Application di bagian kiri
4 klik New atau lambang kertas di pojok paling kiri seperti di tunjukan panah pada gambar berikut

5 pada Name di sebelah kanan akan muncul New_configuration(1)
6 ganti New_configuration(1) dengan nama sesuai logika anda sendiri, biasanya sebuah nama yang menyerupai nama aplikasi yang akan di coba, agar bisa di ingat AVD mana untuk aplikasi yang mana? Adalah penting untuk mencoba aplikasi dengan AVD yang berbeda.
7 klik Android, Browse pilih aplikasi yang akan di pakai oleh AVD ini
8  pilih Launch Default Activity
9 klik Target pilih Automatic dan pilih dari Select preferred Android Virtua Device for deployment AVD mana yang mau di pasang
10 klik Apply, Run biarkan AVD/Emulator-nya jalan.

Nanti setiap kali membuat perubahan pada aplikasi dan mau lihat hasilnya maka tinggal klik kanan Run As, 1 Android Application

Kalau mau memulai belajar membangun aplikasi android silahkan join dan baca2 di sini

Selamat mencoba

Membangun aplikasi android dengan eclipse

Kalau anda belum download android dan eclipse silahkan baca disini sebelum melanjutkan membaca artikel ini.
Baris berikut adalah iklan, sorry yah...





Langkah2 untuk membangun aplikasi android dengan eclipse adalah sbb:
1. Klik pada File, New, Project secara berurutan
2. di kotak 'New Project ' tekan 'Android'  'Android Project' "Next" secara berurutan
3. di kotak "New Android Project" ketik nama project pada 'Project Name'
4. Pilih Create new project in work space
5. Pilih 'Use default location' (perhatikan di mana alamat default location itu), klik Next
6. Pilih android level apa tergantung HP yang akan memakai aplikasi yang di bangun, dan klik Next 
7. Pada 'Aplication Info' isi 'Package Name' dengan sistim file yang di pisahkan dengan tanda titik. misalnya proyek.membangun.aplikasi.game ,atau proyek.membangun. aplikasi.web
Nama Package name tergantung logika masing developer tapi harus mengikuti logika namespace java. Google menyarankan untuk menulis package name dengan membalikan nama domain seperti com.namaDomain.proyekAndroid.namaProyek Namun semuanya tergantung logika menyusun file sistim masing2
8. Tulis nama activity di dalam 'Create Activity' harus di mulai dengan huruf besar itu adalah peraturan java. Nama activity itu sendiri adalah nama class utama yang akan berperan dalam cara kerja dan logika aplikasi
9. pada Minimum SDK, pilihlah android level yang lama, dengan demikian maka aplikasi yang di buat dapat juga di nikmati oleh mereka yang belum punya android baru. Usahakan sebisa mungkin untuk membangun aplikasi yang bisa di baca oleh setiap tingkatan android dari android lama sampai android yang paling baru.
10. klik 'Finish'

Kalau semua langkah di atas di ikuti dengan benar maka nama aplikasi yang telah anda tulis akan terlihat pada bagian kiri eclipse seperti pada gambar berikut
Untuk menulis class utama yaitu nama activity yang telah kita tulis pada 'Create Activity' sebelumnya, klik pada folder src, klik pada nama package(nama yang di pisahkan olek titik),klik dua kali pada class utama untuk memulai menulis kode java. Lihat contoh sebuah class java

Untuk design user interface(UI) buka folder res, layout secara berurutan di sana akan di temukan halaman yang secara default di beri nama main.xml Sedangkan untuk memuat tulisan yang akan terlihat di layar HP silahkan buka folder values yang di dalamnya terdapat folder bernama strings.xml. Jikalau melihat kode XML seperti android:text="@string/tulisanPerOrang" itu maksudnya, menyuruh HP untuk melihat tulisan yang beridentifikasi tulisanPerorang pada halaman string.xml

Lihat contoh halaman XML untuk user inteface

selamat menulis kode android

Mengatur Lingkungan Kerja Android Pada Windows

Beberapa hal yang di perlukan oleh windows untuk membangun aplikasi android adalah:
1. Java
2. Android
3. Eclipse

Java

Saya download java dari http://www.oracle.com/technetwork/java/javase/downloads/index.html
Setelah di buka zip file maka di dalamnya saya dapatkan folder bernama jdk1.60_18 silahkan ganti nama folder ini sesuai kemauan masing2 tapi harus di ingat bahwa nama folder ini sangat penting untuk di ketahui keberadaan-nya, karena nantinya akan di butuhkan oleh 'windows environment variables' agar sistem windows mengerti java

Cara memasang java pada sistim windows adalah sbb:
- klik dua kali pada folder jdk1.60_18
- klik 2 kali pada folder bin dan ambil alamatnya(path) dari 'address bar'
- klik kanan pada 'My Computer' pilih 'Properties'
- klik pada Advance' atau 'Advance system settings'
- Pada tab 'Advance' klik 'Environment Variables'
- Pada 'System variables' klik satu kali pada 'Path' dan klik 'Edit'
- Paste atau tulis alamat folder bin dari 'Address bar' tadi setelah ketik tanda ';'(tanpa tanda petik)di bagian paling akhir setelah tanda '\'(tanpa tanda petik)pada baris "Variable value". dan klik OK
Perhatian: harus hati2 kalau mau mengubah 'path variables' kalau tidak hati2 maka komputer anda tak dapat bekerja lagi. Hati2 yang saya maksukan di sini adalah agar tidak merubah 'Path' yang telah ada di sana. Kalau perlu copy dulu isi path yang ada sehingga kalau terjadi kesalahan, biasanya kesalahan megetik, maka dengan muda untuk paste kembali isi 'Environment variables' yang ada sebelumnya.

Android

Saya download android SDK(software development kit) dari http://developer.android.com/sdk/index.html
Setelah buka zip file saya dapat folder bernama 'android-sdk-windows'. Kalau anda bukan orang malas seperti saya, silahkan ubah nama folder tersebut sesuai logika anda sendiri, tapi harus di ingat bahwa nama folder tersebut sangat penting untuk di ketahui keberadaan-nya karena ia juga akan di butuhkan oleh windows 'Environment variables'

Langkah untuk memasang android pada windows adalah sbb:
- klik dua kali pada folder 'android-sdk-windows'(mungkin anda telah menguba nama folder)
- cari folder bernama 'tools' dan klik dua kali
- ambil alamat dari address bar dengan cara klik kanan dan 'copy'
- ikuti langkah seperti memasang java tadi, untuk menemukan 'Environment variables'
- Pergi ke bagian paling akhir "Variable value" setelah "\" ktik tanda ';'(tanpa tanda kutip) klik kanan lalu 'paste' atau tekan 'Ctrl' dan 'v'


Eclipse

Download Eclipse dari http://www.eclipse.org/downloads/
Setelah buka file zip, buka file dengan klik 2 kali pada eclipse.exe yang ada logo bundar berwarna ungu (kalau tak salah)

Mengikat android dengan eclipse

untuk membawa android ke dalam ruang kerja eclipse
- buka eclipse, pergi ke Windows, kemudian Preference
- klik sekali pada Android dan klik Browse untuk mencari file 'android-sdk-windows'
- klik 'Apply' dan 'OK'
- Sambung komputer ke internet
- masih di Eclipse, pergi ke 'Help', 'Install New Software'
- Ketik 'ADT - https://dl-ssl.google.com/android/eclipse/' (tanpa tanda kutip) pada baris 'Work with' dan klik 'Add'
- klik 'Select All' lalu 'Next' dan ikuti petunjuk selebihnya sesuai kebutuhan komputer yang anda miliki

Berhasil atau belum?

_masih di dalam Eclipse pergi ke File, New, Project secara berurutan. Kalau berhasil maka 'Android Project' harus ada dalam folder 'Android'
Silahkan mulai bangun aplikasi android dari sana.

Kalau belum tahu cara membangun aplikasi yang mewah silahkan mulai dengan yang sederhana dengan baca disini

Kalkulator untuk bayar tip di restaurant

Hargailah para pekerja2 di hotel2, di cafe, di warung2 termasuk ata_Pika_muku, dengan membiasakan diri untuk memberi tip. Di negara lain seperti Amerika, membayar tip adalah wajib hukumnya. Semoga kita juga tidak kalah untuk bisa membayar sedekah seperti yang di lakukan orang Amerika tsb.
 Ini adalah kalkulator yang bisa di pasang di HP, agar mudah menghitung berapa tip yang harus di bayar dan sekalian sebagai batu loncatan untuk belajar membuat aplikasi berbasis android.

Minggu lalu, di halaman XML saya telah mengulas tentang android user interface(UI). Kali ini saya akan menceritaka bagaimana object-object yang ada pada interface tersebut dapat bekerja sesuai tujuan pembuatannya. Untuk itu mari kita membuat sebuah class yang bekerja untuk menjalankan logika matematika dari aplikasi ini. Demi mempermudahkan komunikasi maka saya memberi nama aplikasinya 'Mesin Hitung' sehingga dengan demikian nama class java yang kita akan bangun sebagai dasar logika aplikasi ini adalah MesinHitung.java
Perhatian...!!untuk menamakan class di bahasa program java haruslah hata-hati. Nama class java tak di perbolehkan ada spasi dan harus di tulis mulai dengan huruf besar, jangan tanya mengapa karena itu adalah hukum java.

Untuk memulai menulis sebuah class pertama kita harus deklarasikan nama paket(package), hal itu sangat penting karena paket itulah yang akan membungkus aplikasi kita sehingga bisa di masukan dan atau di download ke banyak HP di seluruh dunia (wallahhh....ke seluruh dunia? ...mimpi dolohh, yang penting ada mimpi man).
Cara menulis atau menamakan paket adalah di luar jangkauan tulisan ini, namun biasanya nama paket adalah kebalikan dari nama domain, atau nama dengan struktur DSV(dot separated value) umpamanya com.namaDomainAnda.aplikasi.gameKu tapi terserah, setiap developer memiliki cara sendiri bagaimana struktur file sistim-nya masing2. Saya sendiri tidak pakai domain, tapi cukup menggunakan sistim file internal saya sendiri, yang logika-nya mengikuti logika saya sendiri. Masih ada alasan lain mengapa nama paket di atur sedemikian rupa tapi hal itu di luar scope tulisan ini. Kalau develop pakai eclipse maka nama paket terimport ke dalam halaman class secara otomatis karena paket telah di isi dan di namakan sejak build process. Silahkan baca disini untuk proses menamakan paket. Berikut adalah nama paket aplikasi saya menurut logika dan sistim saya sendiri.
package com.vik_sintus.projects.MesinHitung;
/** di wilayah ini nantinya di isi dengan class bawaan android ketika di butuhkan*/
Di awal development, kadang kita tidak tahu dengan pasti object apa saja yang akan kita butuhkan untuk membangun sebuah class, namun eclipse dan android akan memberikan peringatan dengan 'error warning' apabila kita menggunakan object yang belum terimport dan juga object yang belum terdeklarasi, kedalam project. Dengan nada marah(ada tanda silang merah) eclipse akan menyatakan bahwa tulisan kode-nya ada yang salah, tapi walau dia marah eclipse tetap memberikan kita jalan keluar dan memberikan kita banyak kemudahan, misalnya hanya dengan klik pada tanda error maka eclipse akan mempersembahkan kita dengan berbagai pilihan object yang mungkin kita butuhkan untuk memperbaiki kesalahan tsb dan juga memberikan kita banyak rekomendasi kira2 langkah apa yang harus di ambil untuk memperbaiki kesalahan pada kode java yang kita tulis.

Setelah meletak-kan paket di paling atas halaman mari kita lanjutkan membangun MesinHitung.java
package com.vik_sintus.projects.MesinHitung;


public class MesinHitung extends Activity {
/** semua isi class akan berada di sini*/
}
Kode di atas adalah benar tapi eclipse dan android akan menyatakan salah dengan pesan error-nya. Hal itu karena class MesinHitung ingin memakai class Activity bawaan android yang harus di import ke halaman MesinHitung.java. Dan setelah di import maka kode java akan menjadi benar dan nampak sbb:
package com.vik_sintus.projects.MesinHitung;

import android.app.Activity;

public class MesinHitung extends Activity {
/** semua isi class akan berada di sini*/
}
Kode pembukaan di atas hanya menyatakan kepada java bahwa class yang saya buat bernama MesinHitung dan ingin bergandengan tangan dengan class Activity. Isi dari class Activity adalah di luar scope tulisan ini, karena class Activity adalah bagian dari android OS(operating system)
NOTE: yang warna hijau adalah komentar dan tidak akan di eksekusi oleh komputer.

Minggu lalu juga kita telah meletakan 14 buah objects pada halaman main.xml. (bagi yg ingin mencoba develop aplikasi ini, maka saya akan letakan semua file yg di butuhkan di akhir tulisan ini). Dari ke 14 objects tersebut ada 6 objects untuk manampakan tulisan, 2 objects untuk tombol dan 6 objects untuk melakukan logika perhitungan dan cara kerja matematika dari aplikasi ini. Ke 6 objects yang mengandung logika matematika tersebut akan di panggil ke class java untuk di poles agar menjadi pintar. Ke 6 objects tersebut antara lain
3 buah untuk input
3 baris bagian bawah untuk menunjukan hasil
Sedangkan 2 buah tombol yaitu tombol 'Hitung" dan tombol "Ulang" akan di panggil juga, tapi hanya untuk nampang dan merespond ketika di klik saja.

Masing2 dari 6 objects tersebut akan membutuhkan 1 data object yang berjenis angka atau berjenis mata uang. Di dalam bahasa program java data seperti itu identik dengan tipe 'double' data.
Misalnya kalau kita ketik Rp1000 di layar hp, Rp1000 dalam hal ini bukan tipe 'double' karena itu hanya untuk menunjukan angka Rp1000. Oleh karena itu agar Rp1000 dapat memiliki logika hitung maka kita harus membuatkan dia sebuah object bayangan untuk mendampingi object data yang terlihat di layar. Perhatikan 6 objects baru dengan tipe 'double' pada kode berikut, mereka berpasangan dengan 3 objects 'EditText' dan 3 objects 'TextView'. Saya menyatakan ke 6 object itu sebagai object baru karena mereka tidak berada di halaman main.xml yang kita buat minggu lalu. Ke 6 object ini di buat atau di hadirkan semata untuk kepentingan logika. Pemahaman atas kehadiran ke 6 object baru tsb adalah kunci utama untuk memahami logika dan proses kerja aplikasi ini. Bahkan pemahaman akan hal tsb sangat membantu untuk memahami proses pembangunan aplikasi android secara menyeluruh.
package com.vik_sintus.projects.MesinHitung;

import android.app.Activity;

public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// berikut 6 objects baru untuk memegang nilai/angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;
/** isi class selngkapnya akan berada di sini*/
}
Secara sederhana EditText adalah untuk membuat tempat yang bisa di ketik di layar HP. Pengguna akan mengisi ketiga tempat text tersebut dan kemudian tekan tombol 'Hitung' sehingga HP dapat menghitung. Mengapa tidak di hitung pakai otak saja? anda benar... tapi di sini kita hanya ingin mengenal bagaimana komputer bisa melakukan komputasi serta melakukan logika menghitung dll. Siapa tahu dari hal yang kecil ini dapat membawa ilmu baru untuk membangun hal-hal yang baru. who knows-lah
Sedangkan Button di pergunakan persis seperti namanya, ia di pakai untuk produksi tombol sedangkan TextView di pakai hanya untuk menampakan text ke layar, text = teks, view = lihat. TextView=melihat teks

Semua objects yang akan dipakai telah di deklarasi seperti terlihat di atas. Selanjutnya konstruksi halaman MesinHitung.java dengan gaya dan cara android.
package com.vik_sintus.projects.MesinHitung;

import android.app.Activity;

public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        membuatObyekBerlogika();
    }
/** isi class selngkapnya akan berada di sini*/
}
Kode di atas akan membuat eclipse marah dengan menunjukan 'error warning' muncul tanda silang warna merah. Hal itu di sebabkan oleh karena kita menyinggung class 'Bundle' dan class 'R'. Kita di suruh untuk mengimport dulu kedua class tsb dan setelah keduanya terimport kedalam project, maka class java akan menjadi benar. Kehadiran class 'R' itu sendiri cukup kompleks, ia di generate secara otomatis oleh android  sedangakan class 'Bundle" adalah termasuk salah satu class bawaan sistim android . Dengan demikian kehadiran dan penampilan dari masing2 class tersebut pada halaman mesinHitung.java agak berbeda. Coba perhatikan tampang class tersebut pada code berikut, class "Bundle" terimport dari class bawaan sistim android 'import android.os.Bundle;' sedangkan class "R" terimport dan terbungkus dari paket yang saya buat 'import com.vik_sintus.projects.MesinHitung.R;'.
package com.vik_sintus.projects.MesinHitung;

import com.vik_sintus.projects.MesinHitung.R;

import android.app.Activity;
import android.os.Bundle;

public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;
//
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        membuatObyekBerlogika();
    }
/** isi class selngkapnya akan berada di sini*/
}
Perhatikan import com.vik_sintus.projects.MesinHitung.R; semua objects yang kita buat akan ter-registrasi secara otomatis di class "R" itulah sebanya perlu di import kehalaman java. Sedangkan "R" menurut rumour adalah singkatan dari Resource. Mengapa tak di sebut Resource saja? itu urusan pembuat program, saya sendiri juga tak tahu mengapa harus pakai "R" saja.

Ada dua hal penting pada pembukaan konstruksi halaman java seperti terlihat di kode paling bawah pada kode MesinHitung.java di atas. setContentView adalah metode bawaan android, dalam hal ini ia menyatakan lihatlah isi dari aplikasi ini di R.layout.main maksudnya lihat bentuk aplikasi ini di folder bernama 'layout' dan filenya bernama 'main.xml' yang kita buat pada artikel minggu lalu.
Kemudian dari pihak kita sendiri menyatakan hey bahasa programan java halaman java ini juga akan saya pakai untuk membuat sebuah metode agar semua object-object yang saya telah deklarasikan dapat memiliki logika java, Untuk itu maka kita harus menciptakan metode(method) sendiri, seperti terlihat pada kode terakhir pada kode di atas, saya sebut saja metodenya membuatObyekBerlogika(); anda boleh menamakan metode sesuai dengan logika anda sendiri. Kalau bukan demikian maka HP hanya akan melihat tulisan kode kita secara literal alias tak ada, atau tak bisa di pakai untuk logika menghitung.

Setelah metodenya telah terdeklarasi maka perlu di bangun atau di konstruksi cara kerja method yang kita maksudkan
package com.vik_sintus.projects.MesinHitung;

import com.vik_sintus.projects.MesinHitung.R;

import android.app.Activity;
import android.os.Bundle;

public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;

@Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   membuatObyekBerlogika();

private void membuatObyekBerlogika(){
 //berikut adalah objects yang perlu di kontrol (di atur)
   tulisBerapaJumlah=(EditText)findViewById(R.id.tulisBerapaJumlah);
   tulisBerapaPersen=(EditText)findViewById(R.id.tulisBerapaPersen);
   tulisBerapaOrang=(EditText)findViewById(R.id.tulisBerapaOrang);
   tunjukJumlahTip=(TextView)findViewById(R.id.tunjukJumlahTip);
   tunjukJumlahTotal=(TextView)findViewById(R.id.tunjukJumlahTotal);
   tunjukBerapaPerOrang=(TextView)findViewById(R.id.tunjukBerapaPerOrang);
   tombolHitung=(Button)findViewById(R.id.tombolHitung);
   tombolHitungUlang=(Button)findViewById(R.id.tombolHitungUlang);
    }
/** isi class selngkapnya akan berada di sini*/
}
Pengaturan seperti terlihat di kode di atas adalah 'self explanatory-lah'. dalam metode tsb kita hanya menyatakan kepada bahasa program java, hey 'tulisBerapaJumlah' yang saya deklrasikan di sini maksudnya adalah sebuah object yang terbuat dari 'EditText' dan dapat di lihat di 'R' yang identitasnya adalah 'tulisBerapaJumlah'. Ingat bahwa bahasa program java dan bahasa progam lain-nya adalah semuanya sangat pintar, tapi semuanya juga tuli dan bisu dan tak punya perasaan. Bagaimana anda komunikasi dengan seorang yang bisu dan juga tuli dan mati rasa? begitulah kalau mau berkomunikasi dengan bahasa programan.
Kode di atas akan ada error warning dari eclipse karena ada class object yang kita pasang tapi belum terimport ke dalam halaman. Setelah class yang kita butuhkan terimport maka kodenya menjadi benar dan akan terliaht sbb
package com.vik_sintus.projects.MesinHitung;

import com.vik_sintus.projects.MesinHitung.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Button;
import android.widget.TextView;


public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;

@Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   membuatObyekBerlogika();

private void membuatObyekBerlogika(){
 //berikut adalah objects yang perlu di kontrol (di atur)
   tulisBerapaJumlah=(EditText)findViewById(R.id.tulisBerapaJumlah);
   tulisBerapaPersen=(EditText)findViewById(R.id.tulisBerapaPersen);
   tulisBerapaOrang=(EditText)findViewById(R.id.tulisBerapaOrang);
   tunjukJumlahTip=(TextView)findViewById(R.id.tunjukJumlahTip);
   tunjukJumlahTotal=(TextView)findViewById(R.id.tunjukJumlahTotal);
   tunjukBerapaPerOrang=(TextView)findViewById(R.id.tunjukBerapaPerOrang);
   tombolHitung=(Button)findViewById(R.id.tombolHitung);
   tombolHitungUlang=(Button)findViewById(R.id.tombolHitungUlang);
    }
/** isi class selngkapnya akan berada di sini*/
}
Berikutnya kita memasang tombol yang hidup dan berlogika, tombol 'Hitung' untuk menghitung dan tombol 'Ulang' untuk menghitung ulang. Untuk pekerjaan seperti itu maka kita akan menggunakan jasa metode bawaan dari android yang bernama setOnClickListener yang bekerja untuk menghidupkan tombol dan juga metode onClick untuk printahkan android apa yang di lakukan saat pengguna hp menekan tombol.
package com.vik_sintus.projects.MesinHitung;

import com.vik_sintus.projects.MesinHitung.R;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;


public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;

@Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   membuatObyekBerlogika();

private void membuatObyekBerlogika(){
 //berikut adalah objects yang perlu di kontrol (di atur)
   tulisBerapaJumlah=(EditText)findViewById(R.id.tulisBerapaJumlah);
   tulisBerapaPersen=(EditText)findViewById(R.id.tulisBerapaPersen);
   tulisBerapaOrang=(EditText)findViewById(R.id.tulisBerapaOrang);
   tunjukJumlahTip=(TextView)findViewById(R.id.tunjukJumlahTip);
   tunjukJumlahTotal=(TextView)findViewById(R.id.tunjukJumlahTotal);
   tunjukBerapaPerOrang=(TextView)findViewById(R.id.tunjukBerapaPerOrang);
   tombolHitung=(Button)findViewById(R.id.tombolHitung);
   tombolHitungUlang=(Button)findViewById(R.id.tombolHitungUlang);
   // berikut untuk menghidupkan tombol
   tombolHitung.setOnClickListener(new Button.OnClickListener() { 
      @Override
   public void onClick (View v){ 
       hitung(); 
       }
      }
     );
   tombolHitungUlang.setOnClickListener(new Button.OnClickListener() { 
      @Override
   public void onClick (View v){ 
       ulangi(); 
       }
      }
     );

   }
/** isi class selngkapnya akan berada di sini*/
}
Untuk melengkapi kode di atas maka perlu untuk mengimport class 'Button' untuk membuat tombol, dan class 'View' untuk membuka halaman ketika tombol di pencet.
Perhatikan tombolHitung dan tombolHitungUlang pada kode di atas. Secara sederhana android menyatakan hey object tombolHitung dengarlah apa yang di lakukan pemilik HP kalau di klik maka kau buka dan hitung yah.
Tadi saya jelaskan bahwa bahasa program adalah pintar tapi tuli dan buta, kita manusia secara otomatis tahu kalau hitung, yah menghitung dong. Namun bahasa program adalah lain cerita, kita harus menjelaskanya secara teliti dan se detail mungkin. Hitung macam apa? yang perlu di hitung tinggal dimana? dan yang perlu di hitung bentuknya seperti apa? Berikut adalah metode(method) hitung() di perjelaskan lagi secra detail proses menghitung yang di maksudkan dalam hitung();.
package com.vik_sintus.projects.MesinHitung;

import com.vik_sintus.projects.MesinHitung.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;

@Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   membuatObyekBerlogika();

private void membuatObyekBerlogika(){
 //berikut adalah objects yang perlu di kontrol (di atur)
   tulisBerapaJumlah=(EditText)findViewById(R.id.tulisBerapaJumlah);
   tulisBerapaPersen=(EditText)findViewById(R.id.tulisBerapaPersen);
   tulisBerapaOrang=(EditText)findViewById(R.id.tulisBerapaOrang);
   tunjukJumlahTip=(TextView)findViewById(R.id.tunjukJumlahTip);
   tunjukJumlahTotal=(TextView)findViewById(R.id.tunjukJumlahTotal);
   tunjukBerapaPerOrang=(TextView)findViewById(R.id.tunjukBerapaPerOrang);
   tombolHitung=(Button)findViewById(R.id.tombolHitung);
   tombolHitungUlang=(Button)findViewById(R.id.tombolHitungUlang);
// berikut untuk menghidupkan tombol  
tombolHitung.setOnClickListener(new Button.OnClickListener() { 
      @Override
   public void onClick (View v){ 
       hitung(); 
       }
      }
     );
   tombolHitungUlang.setOnClickListener(new Button.OnClickListener() { 
      @Override
   public void onClick (View v){ 
       ulangi(); 
       }
      }
     );

   }
// apa yang di lakukan setelah tombol 'Hitung' di klik
private void hitung(){
     //apa yang perlu di hitung? data macam apa? tinggalnya dimana?
     berapaJumlah=Double.parseDouble(tulisBerapaJumlah.getText().toString());
     berapaPersen=Double.parseDouble(tulisBerapaPersen.getText().toString());
     jumlahOrang=Double.parseDouble(tulisBerapaOrang.getText().toString());
     
     //logika matematika-nya
     berapaTip=(berapaJumlah*berapaPersen)/100;
     berapaTotal=berapaJumlah+berapaTip;
     berapaPerOrang=berapaTotal/jumlahOrang;
     
     //hasil perhitungan
     tunjukJumlahTip.setText(Double.toString(berapaTip));
     tunjukJumlahTotal.setText(Double.toString(berapaTotal));
     tunjukBerapaPerOrang.setText(Double.toString(berapaPerOrang));

}
/** isi class selngkapnya akan berada di sini*/
}
Lihat logika hitung() pada kode di atas, Kalau kita manusia menyatakan berapaJumlah maksudnya berapaJumlah tapi komputer lain ceritanya. Kita harus jelaskan berapaJumlah itu apa? tinggalnya di mana? bentuknya bagaimana? Setelah komputernya paham, baru kemudian komputer menjadi lebih pintar dari kita, sebelum itu komputer hanyalah onggokan besi dan kabel.

Metode 'Ulangi()" yaitu untuk menghitung ulang, ia memiliki logika yang sederhana saja, ia hanya menyatakan... kalau klik "Ulang"  maka 3 objects kembali ke '0' dan tiga objects lainnya di isi saja dengan titik seperti ini "..." seperti di tunjukan pada kode berikut. Dengan demikian maka class MesinHitung.java menjadi lengkap sebagai sebuah class java seperti di bawah ini
package com.vik_sintus.projects.MesinHitung;
/**(c)Vik Sintus Projects
*tak di perkenankan pakai kode ini untuk kepentingan komersial,
*boleh d pakai untuk kepentingan belajar saja,
*
*/
import com.vik_sintus.projects.MesinHitung.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;

@Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   membuatObyekBerlogika();

private void membuatObyekBerlogika(){
 //berikut adalah objects yang perlu di kontrol (di atur)
   tulisBerapaJumlah=(EditText)findViewById(R.id.tulisBerapaJumlah);
   tulisBerapaPersen=(EditText)findViewById(R.id.tulisBerapaPersen);
   tulisBerapaOrang=(EditText)findViewById(R.id.tulisBerapaOrang);
   tunjukJumlahTip=(TextView)findViewById(R.id.tunjukJumlahTip);
   tunjukJumlahTotal=(TextView)findViewById(R.id.tunjukJumlahTotal);
   tunjukBerapaPerOrang=(TextView)findViewById(R.id.tunjukBerapaPerOrang);
   tombolHitung=(Button)findViewById(R.id.tombolHitung);
   tombolHitungUlang=(Button)findViewById(R.id.tombolHitungUlang);
 // berikut untuk menghidupkan tombol 
   tombolHitung.setOnClickListener(new Button.OnClickListener() { 
      @Override
   public void onClick (View v){ 
       hitung(); 
       }
      }
     );
   tombolHitungUlang.setOnClickListener(new Button.OnClickListener() { 
      @Override
   public void onClick (View v){ 
       ulangi(); 
       }
      }
     );

   }
// apa yang di lakukan setelah tombol 'Hitung' di klik
 private void hitung(){
     //nilai berapa, datang darimana
     berapaJumlah=Double.parseDouble(tulisBerapaJumlah.getText().toString());
     berapaPersen=Double.parseDouble(tulisBerapaPersen.getText().toString());
     jumlahOrang=Double.parseDouble(tulisBerapaOrang.getText().toString());
     
     //logika matematika-nya
     berapaTip=(berapaJumlah*berapaPersen)/100;
     berapaTotal=berapaJumlah+berapaTip;
     berapaPerOrang=berapaTotal/jumlahOrang;
     
     //hasil perhitungan
     tunjukJumlahTip.setText(Double.toString(berapaTip));
     tunjukJumlahTotal.setText(Double.toString(berapaTotal));
     tunjukBerapaPerOrang.setText(Double.toString(berapaPerOrang));

}
//ketika klik tombol Ulang kembali ke 0 dan ...
 private void ulangi(){
     tulisBerapaJumlah.setText("0");
     tulisBerapaPersen.setText("0");
     tulisBerapaOrang.setText("0");
     tunjukJumlahTip.setText("....");
     tunjukJumlahTotal.setText("....");
     tunjukBerapaPerOrang.setText("....");
    }

}
Logika MesinHitung.java selasai, bagi yang ingin membuat aplikasi ini menjadi lengkap dan dapat di install ke HP, maka berikut adalah 3 buah halaman xml untuk melengkapi kode java di atas dan beraksi sebagai interface. Halaman main.xml telah di panggil dari kode di atas coba lihat di bagian  setContentView(R.layout.main); dan dari dalam main.xml akan di panggil beberapa text untuk tampil di layar HP melalui @string .

Ke 3 file xml tsb antara lain
  • main.xml
  • strings.xml dan
  • AndroidManifest.xml

Berikut adalah isi dari main.xml
<?xml version="1.0" encoding="utf-8"?>
<linearlayout 
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
android:orientation="vertical" 
xmlns:android="http://schemas.android.com/apk/res/android">
    
    <linearlayout 
android:id="@+id/linearLayout1" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanBerapaJumlah" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanBerapaJumlah" 
android:textsize="20sp">
    </textview>
    <edittext 
android:id="@+id/tulisBerapaJumlah" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:text="@string/tulisBerapaJumlah">
    </edittext>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout2" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanBerapaPersen" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanBerapaPersen" 
android:textsize="20sp">
    </textview>
    <edittext 
android:id="@+id/tulisBerapaPersen" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:text="@string/tulisBerapaPersen">
    </edittext>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout3" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanBerapaOrang" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanBerapaOrang" 
android:textsize="20sp">
    </textview>
    <edittext 
android:id="@+id/tulisBerapaOrang" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:text="@string/tulisBerapaOrang">
    </edittext>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout4" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent">
    <button 
android:id="@+id/tombolHitung" 
android:layout_height="wrap_content" 
android:layout_weight="1" 
android:layout_width="wrap_content" 
android:text="@string/tombolHitung" 
android:textsize="20sp">
    </button>
    <button 
android:id="@+id/tombolHitungUlang" 
android:layout_height="wrap_content" 
android:layout_weight="1" 
android:layout_width="wrap_content" 
android:text="@string/tombolHitungUlang" 
android:textsize="20sp">
    </button>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout5" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisJumlahTip" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisJumlahTip">
    </textview>
    <textview 
android:id="@+id/tunjukJumlahTip" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="wrap_content" 
android:text="" 
android:textcolor="#99FF33" 
android:textstyle="bold">
    </textview>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout6" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanJumlahTotal" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanJumlahTotal">
    </textview>
    <textview 
android:id="@+id/tunjukJumlahTotal" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="wrap_content" 
android:text="" 
android:textcolor="#99FF33" 
android:textstyle="bold">
    </textview>
</linearlayout>
<linearlayout 
android:id="@+id/linearLayout7" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanPerOrang" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanPerOrang">
    </textview>
    <textview 
android:id="@+id/tunjukBerapaPerOrang" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="wrap_content" 
android:text="" 
android:textcolor="#99FF33" 
android:textstyle="bold">
    </textview>
</linearlayout>
</linearlayout>

Perhatikan pada kode xml di atas ada beberapa @string yang akan di jawab oleh strings.xml di bawah ini. Berikut adalah isi dari strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="nama_aplikasi">BayarTip </string>
    <string name="tulisanBerapaJumlah">Besarnya Bill....Rp</string>
    <string name="tulisBerapaJumlah">0</string>
    <string name="tulisanBerapaPersen">Tipnya Berapa..%</string>
    <string name="tulisBerapaPersen">0</string>
    <string name="tulisanBerapaOrang"> Berapa Orang......</string>
    <string name="tulisBerapaOrang">0</string>
    <string name="tombolHitung">Hitung</string>
    <string name="tombolHitungUlang">Ulang</string>
    <string name="tulisJumlahTip">Jumlah Tip = </string>
    <string name="tulisanJumlahTotal">Jumlah Total = </string>
    <string name="tulisanPerOrang">Per Orang = </string>
</resources>
Berikut adalah isi dari AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.vik_sintus.projects.MesinHitung"
      android:versionCode="1"
      android:versionName="bayarTip 1.0">
    <uses-sdk android:minSdkVersion="3" />

    <application  android:icon="@drawable/logo" 
                  android:label="@string/nama_aplikasi">
        <activity android:name="com.vik_sintus.projects.MesinHitung.MesinHitung"
                  android:label="@string/nama_aplikasi">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" /> 
            </intent-filter>
        </activity>
       
    </application>
</manifest>

Summary:
Agar dapat bekerja sebagai mesin hitung tip maka class MesinHitung.java di atas membutuhkan 3 buah file xml yaitu:
  • main.xml
  • strings.xml
  • AndroidManifest.xml
Silahkan mencoba
Hasilnya seperti gambar berikut

Membuat User Interface di Android

Menurut saya, hal yang paling rumit dalam proses pembangunan sebuah aplikasi android adalah pengaturan,  struktur user interface(UI). Berhasil atau tidaknya sebuah proyek pembangunan aplikasi adalah sangat tergantung pada proses penyusunan UI yang cukup berlogika baik untuk developer sendiri maupun untuk pengguna. Tanpa struktur inteface yang solid maka pembangunan sebuah software akan terbengkelai bahkan tak akan pernah selesai. Saya sendiri punya setumpuk aplikasi yang telah mulai di bangun tapi tak satupun yang selesai, Mudah2an ketika pensiun nanti baru ada banyak waktu untuk menyelesaikan-nya. Saya hanya dapat menyelesaikan aplikasi kecil seperti yang akan saya tunjuk-kan disini

Berikut adalah sebuah aplikasi yang saya rombak dari awal hingga akhir. Aplikasi ini sangat sederhana sehingga tidak butuh orang pintar untuk membuatnya, orang seperti sayapun bisa. Alasan utama mengapa saya paham dengan aplikasi sederhana ini karena UI-nya hanya sedikit dan pendek. Aplikasi inipun sudah banyak bergentayangan di internet, ada yang di download secara gratis adapula yang harus di beli. Aplikasi ini digunakan untuk kakulasi berapa persen tip yang harus di berikan kepada pelayan restaurant dan di gunakan untuk menghitung pembayaran bill restaurant yang perlu di bagi rata atau di share pembayaran-nya oleh peserta yang ikut makan sehingga tidak membebankan pembayaran hanya satu orang saja..(jangan nebeng terus yah).
Untuk memperlancar proses belajar maka saya telah memasang aplikasi ini di android market, silahkan di download disini, untuk melihat secara langsung bagaimana sebuah aplikasi android di buat dari awal sejak menulis kode sampai akhirnya di download ke HP ke seluruh dunia (mimpi doloh...) sehingga artikel ini tak akan nampak hanya asal ngomong tanpa bukti yang jelas. Aplikasi inipun sangat sederhana tapi proses pembuatan semua aplikasi hampir sama, dari yang sederhana sampai ke aplikasi yang sangat mewah. Saya harapkan agar dapat menggairahkan developer2 muda, sehingga di masa yang akan datang Indonesia tidak saja menjadi konsumer software tapi juga bisa menjadi producer(mimpi lageee...).
Setelah aplikasinya di masuk-kan ke hand phone maka akan terlihat seperti gambar berikut:
Setelah berdebat sengit antara aku, saya dan diri sendiri akhirnya sepakat untuk menggunakan UI seperti pada gambar di atas. Design UI boleh di design se-indah atau se-jelek mungkin tergantung persetujuan semua pihak atau tergantung UI mana yang di sukai pasar.
Sebelum menulis kode XML untuk membangun interface, perhatikan se-jeli mungkin... lagi dan lagi... semua obyek(object) yang ada di interface, gagal memperhatikan obyek2 yang  di perlukan maka 100% proyek pembangunan aplikasi akan gagal pula.

Pada gambar di atas terdapat 14 object hadir menempatkan posisinya di layar. Ke 14 object tersebut adalah amat sangat perlu untuk di cermati. Dapatkah anda melihat 14 object tsb?... pada gambar di atas terlihat dari atas ke bawah ada 7 baris, setiap baris ada 2 object yaitu object bagian kiri dan object bagian kanan. Masing2 object tentunya memiliki fungsi dan tanggung jawab masing2. Misalnya, tombol "Hitung" di gunakan untuk menghitung dan ia di buat dari widget android bernama <Button>, sedangkan tulisan 'Besarnya Bill....Rp' dan beberapa tulisan lainya adalah di buat dari widget yang bernama <TextView> di sebut TextView karena memang gunanya hanya untuk memperlihatkan text atau hanya memperlihatkan tulisan pada layar mobile devices. Di lain pihak, di pojok kanan atas layar terlihat 3 object yang nampak seperti tombol juga tapi ketiganya bukan tombol melainkan tempat untuk menempatkan text, di buat dari widget yang bernama (EditText) kerjanya untuk pegang text yang mau di edit karena memang di dalam ketiga tombol itu akan sering di edit text-nya setiap kali kita mau buat kalkulasi baru.

Mari kita bangun interfacenya pakai XML. saya memutuskan untuk menggunakan design linear layout yaitu design yang menggunakan line by line patern. Masing2 developer memiliki alasan sendiri untuk memakai design patern yang di sukainya. Pada proyek ini saya pakai linear layout karena memang bentuk interface yang akan di hasilkan adalah baris demi baris.

Demi flexiblelity saya akan membungkus semua baris(linear)  dalam satu LinearLayout sehingga di dalam satu LinearLayout ada banyak LinearLayout yang lain
Kode XML berikut adalah LinearLayout Utama yang akan membungkus semua LinearLayout lain yang berada di dalam-nya



Kode di atas boleh di katakan hanya untuk membuka layar kosong karena belum ada isinya, ia hanya menyatakan bahwa semua yang ada di dalamnya akan menunjukan interface yang berorientasi 'vertikal' sedangkan 'fill_parent' maksudnya agar semua isi yang terkandung akan memenuhi ruang yang di sediakan(apapun alasan-nya, jangan lari atau sembunyi di luar layar)

Kode berikut untuk baris pertama pada layar

    
    
    
    


Saya sengaja menggunakan kata aduhai yang amat keren sebagai judul artikel ini "Strategi" alamak saya sendiri jadi takut membacanya (di kampung saya istilahnya 'mlaju legit'). Strategi yang saya maksudkan di sini adalah bekerja lebih keras, menulis lebih banyak kode yang kadang melebihi yang di butuhkan oleh aplikasi yang kita bangun, coba perhatikan pada kode XML di atas, ada banyak sekali kodenya hanya untuk satu baris pertama yang akan muncul di layar? itupun belum seberapa karena pada kode di atas ada @string yang berarti isi baris @string adalah berada  pada halaman lain yang bernama strings.xml, nanti kita akan kesana untuk membuat halaman strings.xml.
Di dalam kode di atas terdapat 2 object untuk memenuhi kebutuhan baris pertama pada layar HP. Object bagian kiri saya beri nama 'tulisanBerapaJumlah' yang di buat dari widget bernama <TextView> , menggunakan TextView karena memang kerjanya hanya untuk view text atau hanya untuk menunjuk-kan teks pada layar HP, sedangkan object di bagian kanan saya kasih nama 'tulisBerapaJumlah' dan di buat dari widget yang bernama <EditText>, menggunakan EditText karena memang kerjanya untuk ganti atau edit text lihat perbedaan-nya? tulisan adalah kata benda karena sudah di tulis  namun tulis masih perlu di tulis lagi dalam hal ini di edit... bingung? coba lihat lagi di layar pada gambar HP di atas. Tulisan yang bagian kiri seperti  'Besarnya Bill....Rp' sudah di tulis, itu sebabnya saya sebut tulisan... nanti semuanya akan lebih jelas ketika kita sampai pada menulis kode java.
@id pada kode di atas adalah logika yang akan di pakai oleh java untuk mengidentifikasi baris pertama pada layar. @id/linearLayout1 adalah nama UI untuk baris pertama, Semua object dengantanda @id akan secara otomatis ter registrasi pada java resource yang secara otomatis pula di beri nama R.java Semua kepentingan logika java akan berada di dalam R.java untuk kepentingan java logic, di himbau untuk tidak merubah isi R.java kecuali kalau sudah berpengalaman untuk itu.
Nama-nama id terserah developer, saya pakai nama default @id/linearLayout1 karena malas ketik (malas penyakit bawaan saya). Sedangkan 'wrap_content' adalah memberikan ruang untuk object sesuai kebutuhan-nya atau sesuai ukuran object itu sendiri (jangan melebar atau meninggi, walau ada ruangan untuk itu), wrap_content adalah saudara sepupunya fill_parent .

Kode xml berikut untuk baris ke 2 berapa % tip-nya

    
    
    
    


Perhatikan lagi, 'tulisanBerapaPersen' terbuat dari <TextView> sedangkan 'tulisBerapaPersen' di buat dari <EditText> karena text-nya akan selalu di edit sesuai dengan besar/kecilnya persentase tip yang akan di berikan. Lihat "@+id/tulisanBerapaPersen" dan "@+id/tulisBerapaPersen" adalah identitas dari kedua object tersebut agar di kenal java.
"@string/tulisanBerapaPersen" maksudnya lihat isi dari 'tulisanBerapaPersen' di strings.xml (semuanya akan lebih jelas ketika kita membuka halaman strings.xml)

Berikut untuk baris ke 3 yaitu menunjuk-kan jumlah orang yang ikut membayar

    
    
    
    

Yang berikut adalah untuk kedua tombol 'Hitung' dan tombol 'Ulang' keduanya terbuat dari widget <Button>

    
    

Kode xml berikut adalah untuk menulis tip yang akan di berikan dan tempat muncul jumlah tip yang akan muncul di bagian kanan layar

    
    
    
    

Perhatikan kode di atas kedua object "tulisJumlahTip" dan "tunjukJumlahTip" addalah terbuat dari widget <TextView>  karena memang keduanya hanya bekerja untuk menunjuk-kan text pada layar telephone.

Berikut adalah dua baris terakhir untuk 'Jumlah Total' dan 'Per Orang' yang berisikan 4 objects. Sama seperti jumlah tip di atas ke 4 object berikut adalah terbuat dari <TextView> juga


    
    
    
    


    
    
    
    

Kalau membangun aplikasi pakai Eclipse, maka secara otomatis file antarmuka di atas akan di beri nama main.xml. Walau demikian kita bisa merubah nama file tersebut sesuai dengan logika kita sendiri. Android sengaja menamakan file tersebut main.xml karena file itu adalah file utama(main)yang akan di panggil dari kode java untuk komputasi dan logika kerja dari aplikasi ini.
Secara keseluruhan file main.xml di atas akan menjadi lengkap seperti berikut
<?xml version="1.0" encoding="utf-8"?>
<linearlayout 
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
android:orientation="vertical" 
xmlns:android="http://schemas.android.com/apk/res/android">
    
    <linearlayout 
android:id="@+id/linearLayout1" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanBerapaJumlah" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanBerapaJumlah" 
android:textsize="20sp">
    </textview>
    <edittext 
android:id="@+id/tulisBerapaJumlah" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:text="@string/tulisBerapaJumlah">
    </edittext>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout2" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanBerapaPersen" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanBerapaPersen" 
android:textsize="20sp">
    </textview>
    <edittext 
android:id="@+id/tulisBerapaPersen" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:text="@string/tulisBerapaPersen">
    </edittext>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout3" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanBerapaOrang" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanBerapaOrang" 
android:textsize="20sp">
    </textview>
    <edittext 
android:id="@+id/tulisBerapaOrang" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:text="@string/tulisBerapaOrang">
    </edittext>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout4" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent">
    <button 
android:id="@+id/tombolHitung" 
android:layout_height="wrap_content" 
android:layout_weight="1" 
android:layout_width="wrap_content" 
android:text="@string/tombolHitung" 
android:textsize="20sp">
    </button>
    <button 
android:id="@+id/tombolHitungUlang" 
android:layout_height="wrap_content" 
android:layout_weight="1" 
android:layout_width="wrap_content" 
android:text="@string/tombolHitungUlang" 
android:textsize="20sp">
    </button>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout5" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisJumlahTip" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisJumlahTip">
    </textview>
    <textview 
android:id="@+id/tunjukJumlahTip" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="wrap_content" 
android:text="" android:textcolor="#99FF33" 
android:textstyle="bold">
    </textview>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout6" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanJumlahTotal" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanJumlahTotal">
    </textview>
    <textview 
android:id="@+id/tunjukJumlahTotal" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="wrap_content" android:text="" 
android:textcolor="#99FF33" 
android:textstyle="bold">
    </textview>
</linearlayout>
<linearlayout 
android:id="@+id/linearLayout7" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanPerOrang" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanPerOrang">
    </textview>
    <textview 
android:id="@+id/tunjukBerapaPerOrang" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="wrap_content" android:text="" 
android:textcolor="#99FF33" 
android:textstyle="bold">
    </textview>
</linearlayout>
</linearlayout>


Untuk melengkapi design UI ini maka sebelum membuat komputasi java, kita selesaikan dulu halaman pelengkap yang bernama strings.xml yang di butuhkan oleh main.xml melalui @strings/

    
    Tip Persentase 
    Besarnya Bill....Rp
    0
    Tipnya Berapa..%
    0
     Berapa Orang......
    0
    Hitung
    Ulang
    Jumlah Tip = 
    Jumlah Total = 
    Per Orang = 

Sampai di sini bentuk UI dan proses menamakan objects yang akan kita butuhkan dalam proses dan cara kerja aplikasi ini sudah selesai. Berikutnya Kita akan membuat sebuah class java yang berguna untuk menterjemahkan kepada komputer tentang apa yang ingin di capai dari aplikasi ini. Silahkan klik di sini untuk melihat class java.

 Summary:
Untuk membuat kalkulator seperti pada gambar di atas di butuhkan 2 file xml  dan 1 file java yaitu

  • main.xml (lihat contoh di atas) 
  • strings.xml (lihat di atas) dan
  • MesinHitung.java (klik disini)