Kondisi tubuh yang kurang fit melanda saya mulai tadi pagi, gara-gara kemarin malam saya paksakan untuk begadang di ITSolution demi menyeselesaikan jurnal. Tidur jam setengah 4 dan bangun lagi jam setengah 8 untuk berangkat kuliah yang jadwalnya sangat-sangat nanggung nyelempit di akhir pekan seperti ini. Belum lagi rasa rindu untuk pulang ke denpasar di pertengahan bulan seperti ini, namun apa daya pekerjaan dan tugas kampus yang masih numpuk minta giliran untuk di-action. Apalagi mata kuliah machine learning yang diajarkan oleh pak hadiq, yang selalu menjadi momok setiap kali seliweran di pikiran saya :(. Yang terpenting di bawa hepi+santai ajalah, bila perlu tugasnya gak usah dikumpulin, dijamin tambah santai :ngakaks:. Nah, sambil mengisi waktu kosong di malam yang hawanya panas ini, saya akan membagikan sedikit tutorial untuk membuat sebuah kalkulator biner sederhana di android. Yuppzzz, memang sudah banyak tutorial yang berseliweran di internet yang membahas tentang cara konversi biner ke desimal maupun sebaliknya. Berhubung saya lagi sedang senang-senangnya membuat aplikasi sederhana di platform android, tak ada salahnya untuk dicoba. Hitung-hitung cari pengalaman+nambah postingan :p.
Yang terpenting di aplikasi kalkulator ini hanya proses perhitungannya saja, untuk event tombol cuma sekedar pemanis. Bagi yang sudah pernah membuat versi java-nya, syntax’nya sama saja. Tinggal mengubah atau menambahkan desain form bagi yang awalnya hanya berupa tampilan console. OK deh, kita langsung aja ke cara pembuatannya. Cekidot mas berooo…
1. Seperti biasa, buat android project baru terlebih dahulu.
2. Disini saya menggunakan 2 activity, yaitu KalkulatorBinerActivity untuk melakukan konversi dari desimal ke biner dan KalkulatorDesimalActivity untuk melakukan konveri dari biner ke desimal. Kodenya seperti di bawah ini :
KalkulatorBinerActivity.java
public class KalkulatorBinerActivity extends Activity { /** Called when the activity is first created. */ EditText t_in,t_out; Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b_hps,b_ke_desimal,b_biner; String var_in=""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); t_in = (EditText) findViewById(R.id.txt_in); t_out = (EditText) findViewById(R.id.txt_out); b0 = (Button) findViewById(R.id.btn0); b1 = (Button) findViewById(R.id.btn1); b2 = (Button) findViewById(R.id.btn2); b3 = (Button) findViewById(R.id.btn3); b4 = (Button) findViewById(R.id.btn4); b5 = (Button) findViewById(R.id.btn5); b6 = (Button) findViewById(R.id.btn6); b7 = (Button) findViewById(R.id.btn7); b8 = (Button) findViewById(R.id.btn8); b9 = (Button) findViewById(R.id.btn9); b_hps = (Button) findViewById(R.id.btn_hapus); b_ke_desimal = (Button) findViewById(R.id.btn_ke_desimal); b_biner = (Button) findViewById(R.id.btn_biner); b1.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in.trim().equals("")) { var_in = "1"; t_in.setText(var_in); } else { var_in = t_in.getText().toString()+"1"; t_in.setText(var_in); } } }); b2.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in.trim().equals("")) { var_in = "2"; t_in.setText(var_in); } else { var_in = t_in.getText().toString()+"2"; t_in.setText(var_in); } } }); b3.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in.trim().equals("")) { var_in = "3"; t_in.setText(var_in); } else { var_in = t_in.getText().toString()+"3"; t_in.setText(var_in); } } }); b4.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in.trim().equals("")) { var_in = "4"; t_in.setText(var_in); } else { var_in = t_in.getText().toString()+"4"; t_in.setText(var_in); } } }); b5.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in.trim().equals("")) { var_in = "5"; t_in.setText(var_in); } else { var_in = t_in.getText().toString()+"5"; t_in.setText(var_in); } } }); b6.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in.trim().equals("")) { var_in = "6"; t_in.setText(var_in); } else { var_in = t_in.getText().toString()+"6"; t_in.setText(var_in); } } }); b7.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in.trim().equals("")) { var_in = "7"; t_in.setText(var_in); } else { var_in = t_in.getText().toString()+"7"; t_in.setText(var_in); } } }); b8.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in.trim().equals("")) { var_in = "8"; t_in.setText(var_in); } else { var_in = t_in.getText().toString()+"8"; t_in.setText(var_in); } } }); b9.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in.trim().equals("")) { var_in = "9"; t_in.setText(var_in); } else { var_in = t_in.getText().toString()+"9"; t_in.setText(var_in); } } }); b0.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in.trim().equals("")) { var_in = "0"; t_in.setText(var_in); } else { var_in = t_in.getText().toString()+"0"; t_in.setText(var_in); } } }); b_hps.setOnClickListener(new OnClickListener() { public void onClick(View v) { t_in.setText(""); t_out.setText(""); } }); b_biner.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in!="") { String hasil = DesimalKeBiner(Integer.parseInt(var_in)); t_out.setText(hasil); var_in=""; } } }); b_ke_desimal.setOnClickListener(new OnClickListener() { public void onClick(View v) { t_in.setText(""); t_out.setText(""); var_in=""; Intent i = new Intent(getApplicationContext(), KalkulatorDesimalActivity.class); startActivity(i); } }); } public String DesimalKeBiner(int angka_desimal) { int sisa_bagi=0, i=0; boolean ulang=true; int[] arr_simpan = new int[10000]; sisa_bagi=angka_desimal; String hasil=""; while (ulang==true) { sisa_bagi = angka_desimal%2; angka_desimal= angka_desimal/2; arr_simpan[i]=sisa_bagi; i++; if((angka_desimal==0)||(angka_desimal==1)) { ulang=false; arr_simpan[i]=angka_desimal; } } for (int a=i; a>=0;a--) { hasil += arr_simpan[a]; } return hasil; } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.opt_menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.tentang: AlertDialog alertDialog; alertDialog = new AlertDialog.Builder(this).create(); alertDialog.setTitle("Sekilas Biner"); alertDialog.setMessage("Bilangan biner adalah salah satu sistem bilangan yang digunakan pada komputer. " + "Berbeda dengan sistem bilangan desimal yang sering kita gunakan sehari-hari, " + "sistem bilangan biner hanya menggunakan dua bilangan yaitu 0 (nol) dan 1 (satu). " + "\n\nSalam, Gede Lumbung\nhttp://gedelumbung.com"); alertDialog.setButton("#OKOK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialog.show(); return true; case R.id.keluar: Intent exit = new Intent(Intent.ACTION_MAIN); exit.addCategory(Intent.CATEGORY_HOME); exit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); KalkulatorBinerActivity.this.finish(); startActivity(exit); return true; default: return super.onOptionsItemSelected(item); } } }
KalkulatorDesimalActivity.java
public class KalkulatorDesimalActivity extends Activity { /** Called when the activity is first created. */ EditText t_in,t_out; Button b0,b1,b_hps,b_ke_biner,b_desimal; String var_in=""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.second); t_in = (EditText) findViewById(R.id.txt_in); t_out = (EditText) findViewById(R.id.txt_out); b0 = (Button) findViewById(R.id.btn0); b1 = (Button) findViewById(R.id.btn1); b_hps = (Button) findViewById(R.id.btn_hapus); b_ke_biner = (Button) findViewById(R.id.btn_ke_biner); b_desimal = (Button) findViewById(R.id.btn_desimal); b1.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in.trim().equals("")) { var_in = "1"; t_in.setText(var_in); } else { var_in = t_in.getText().toString()+"1"; t_in.setText(var_in); } } }); b0.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in.trim().equals("")) { var_in = "0"; t_in.setText(var_in); } else { var_in = t_in.getText().toString()+"0"; t_in.setText(var_in); } } }); b_hps.setOnClickListener(new OnClickListener() { public void onClick(View v) { t_in.setText(""); t_out.setText(""); } }); b_desimal.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(var_in!="") { int hasil = BinerKeDesimal(Integer.parseInt(var_in)); t_out.setText(Double.toString(hasil)); var_in=""; } } }); b_ke_biner.setOnClickListener(new OnClickListener() { public void onClick(View v) { KalkulatorDesimalActivity.this.finish(); } }); } public int BinerKeDesimal(int angka_desimal) { String bil = Integer.toString(angka_desimal); int[] arr_simpan= new int[10000]; String[] str= new String[10000]; double hasil=0; int hasil_akhir=0; int a=0; char t; for(int i=0;i < bil.length();i++) { t = bil.charAt(i); str[i]=Character.toString(t); } for(int i=bil.length()-1; i>=0;i--) { arr_simpan[a]=Integer.parseInt(str[i]); hasil= arr_simpan[a]* (Math.pow(2,a)); hasil_akhir=hasil_akhir+(int)hasil; a++; } return hasil_akhir; } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.opt_menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.tentang: AlertDialog alertDialog; alertDialog = new AlertDialog.Builder(this).create(); alertDialog.setTitle("Sekilas Biner"); alertDialog.setMessage("Bilangan biner adalah salah satu sistem bilangan yang digunakan pada komputer. " + "Berbeda dengan sistem bilangan desimal yang sering kita gunakan sehari-hari, " + "sistem bilangan biner hanya menggunakan dua bilangan yaitu 0 (nol) dan 1 (satu). " + "\n\nSalam, Gede Lumbung\nhttp://gedelumbung.com"); alertDialog.setButton("#OKOK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialog.show(); return true; case R.id.keluar: Intent exit = new Intent(Intent.ACTION_MAIN); exit.addCategory(Intent.CATEGORY_HOME); exit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); KalkulatorDesimalActivity.this.finish(); startActivity(exit); return true; default: return super.onOptionsItemSelected(item); } } }
3. Karena menggunakan 2 buah activity, otomatis juga membutuhkan 2 buah layout yang berbeda. Saya tambahkan satu layout untuk layout options menu, saya tempatkan pada folder menu/opt_menu.xml. Jadi total terdapat 3 buah layout.
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:padding="10dip" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <TextView android:layout_width="68dp" android:layout_height="wrap_content" android:gravity="bottom" android:singleLine="true" android:text="Input : " android:textSize="18sp" android:textStyle="normal" android:typeface="normal" /> <EditText android:id="@+id/txt_in" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:editable="false" android:gravity="bottom" android:singleLine="true" android:textSize="30sp" android:textStyle="normal" android:typeface="normal" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <TextView android:layout_width="68dp" android:layout_height="wrap_content" android:gravity="bottom" android:singleLine="true" android:text="Output : " android:textSize="18sp" android:textStyle="normal" android:typeface="normal" /> <EditText android:id="@+id/txt_out" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:editable="false" android:gravity="bottom" android:singleLine="true" android:textSize="30sp" android:textStyle="normal" android:typeface="normal" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/btn7" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="7" android:textSize="24sp" android:textStyle="bold" /> <Button android:id="@+id/btn8" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="8" android:textSize="24sp" android:textStyle="bold" /> <Button android:id="@+id/btn9" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="9" android:textSize="24sp" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/btn4" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="4" android:textSize="24sp" android:textStyle="bold" /> <Button android:id="@+id/btn5" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="5" android:textSize="24sp" android:textStyle="bold" /> <Button android:id="@+id/btn6" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="6" android:textSize="24sp" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/btn1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="1" android:textSize="24sp" android:textStyle="bold" /> <Button android:id="@+id/btn2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="2" android:textSize="24sp" android:textStyle="bold" /> <Button android:id="@+id/btn3" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="3" android:textSize="24sp" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/btn0" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_span="2" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="0" android:textSize="23sp" android:textStyle="bold" /> <Button android:id="@+id/btn_hapus" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="#HAPUS" android:textSize="23sp" android:textStyle="bold" /> <Button android:id="@+id/btn_biner" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="#OKOK" android:textSize="23sp" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/btn_ke_desimal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_span="2" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="Biner ke Desimal" android:textSize="23sp" android:textStyle="bold" /> </LinearLayout> </LinearLayout>
second.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:padding="10dip" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <TextView android:layout_width="68dp" android:layout_height="wrap_content" android:gravity="bottom" android:singleLine="true" android:text="Input : " android:textSize="18sp" android:textStyle="normal" android:typeface="normal" /> <EditText android:id="@+id/txt_in" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:editable="false" android:gravity="bottom" android:singleLine="true" android:textSize="30sp" android:textStyle="normal" android:typeface="normal" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <TextView android:layout_width="68dp" android:layout_height="wrap_content" android:gravity="bottom" android:singleLine="true" android:text="Output : " android:textSize="18sp" android:textStyle="normal" android:typeface="normal" /> <EditText android:id="@+id/txt_out" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:editable="false" android:gravity="bottom" android:singleLine="true" android:textSize="30sp" android:textStyle="normal" android:typeface="normal" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/btn0" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="0" android:textSize="24sp" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/btn1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="1" android:textSize="24sp" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/btn_hapus" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="#HAPUS" android:textSize="23sp" android:textStyle="bold" /> <Button android:id="@+id/btn_desimal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="#OKOK" android:textSize="23sp" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/btn_ke_biner" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_span="2" android:layout_weight="1" android:gravity="center" android:padding="0px" android:text="Desimal ke Biner" android:textSize="23sp" android:textStyle="bold" /> </LinearLayout> </LinearLayout>
opt_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/tentang" android:icon="@drawable/tentang" android:title="Apa itu Biner?" /> <item android:id="@+id/keluar" android:icon="@drawable/logout" android:title="Keluar | Metu" /> </menu>
4. Yang terakhir, kita perlu mendaftarkan activity yang kedua di dalam file AndroidManifest.xml.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="dlmbg.pckg.kalkulator.biner" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".KalkulatorBinerActivity" android:label="Kalkulator Biner" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="KalkulatorDesimalActivity" android:label="Kalkulator Desimal"></activity> </application> </manifest>
5. Jalankan aplikasi via emulator, bisa juga dijalanlan langsung ke smartphone dengan menghubungkan via kabel usb (syaratnya, driver harus sudah terinstall)
Nahh, gampang kan cara pembuatannya…??? Kalkulator di atas masih bisa ditambahkan dengan fungsi untuk konversi ke hexadesimal dan oktal. Bisa juga ditambahkan tabel gerbang logika, jadinya ketika rekan-rekan sedang mengerjakan ujian mata kuliah sistem digital pasti terbantu (kalau dibolehkan bawa hape lho yaw :D). OK deh, sekian dulu postingan saya kali ini. Semoga bisa bermanfaat untuk kita semua.
Happy Blogging and Keep Coding
Cheerrrss….!!!!
salut buat beli gede… tiada hari tanpa coding ….. 🙂
maw di android 2.2 ne bos???
keren bli… oya bli.. kalo bisa.. tolong share tutorial membuat aplikasi quiz sederhana android donk… sukses bwt bli….
kak gimana caranya impor ke Eclipse??? saya sudah import tapi kok masih error di rsc??? mohon bantuannya kakak….. pliiiisssss