net/publication/323644259
CITATIONS READS
0 6,832
2 authors:
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by M Reza Faisal on 08 March 2018.
Buku ini ditujukan untuk pengembang yang ingin mempelajari pembuatan aplikasi mobile berbasis
platform Android dengan menggunakan teknologi Microsoft seperti bahasa C# dan Visual Studio 2017.
Untuk menghubungi penulis anda dapat mengirimkan email ke alamat erick@actual-training.com atau
ke reza.faisal@gmail.com.
Akhir kata semoga buku ini dapat bermanfaat bagi komunitas IT di Indonesia.
1
Daftar Isi
Kata Pengantar............................................................................................................................................... i
Daftar Isi ........................................................................................................................................................ 2
1 Instalasi Xamarin for Visual Studio ................................................................................................... 3
2 Android Platform .............................................................................................................................. 4
2.1 Xamarin dan Android ................................................................................................................ 6
2.2 Menjalankan Android Emulator ................................................................................................ 8
2.3 Menambahkan Activity ........................................................................................................... 18
2.4 Menyimpan State ketika proses Recreated Activity ............................................................... 20
2.5 Android Life Cycle Management ............................................................................................. 21
2.6 Menambahkan Menu.............................................................................................................. 23
2.7 Menambahkan Navigasi Action Bar ........................................................................................ 24
2.8 Menambahkan Context Menu ................................................................................................ 24
2.9 Mengirimkan Nilai antar Activity ............................................................................................ 25
2.10 Code Sharing dengan Platform Lain ........................................................................................ 27
3 Layout.............................................................................................................................................. 32
3.1 Linear Layout ........................................................................................................................... 32
3.2 Relative Layout ........................................................................................................................ 32
3.3 Table Layout ............................................................................................................................ 34
3.4 Grid View ................................................................................................................................. 36
4 Membuat ListView .......................................................................................................................... 38
4.1 Menampilkan data dengan ListView ....................................................................................... 38
4.2 Menggunakan ListActivity ....................................................................................................... 39
4.3 Menggunakan Simple Adapter................................................................................................ 40
5 Menggunakan REST Web Services .................................................................................................. 41
2
1 PENGENALAN XAMARIN FOR ANDROID
Atau jika anda sudah memiliki Visual Studio 2015 sebelumnya, anda dapat mengunduh aplikasi disini
untuk mengupdate Visual Studio dan juga menginstal Xamarin:
• https://www.xamarin.com/download
Instalasi Visual Studio 2015 Community with Update 2 adalah sebagai berikut:
3
4
2 ARSITEKTUR ANDROID PLATFORM
Arssitektur dari platform Android dapat dilihat dari bagan dibawah ini:
Langkah kompilasi yang dilakukan saat program Android dijalankan adalah sebagai berikut:
Android sendiri mempunyai banyak SDK, yang terbaru adalah API Level 23 untuk Sistem Operasi
Marshmallow.
5
2.1 XAMARIN DAN ANDROID
Xamarin adalah platform yang berisi library cross platform untuk membuat aplikasi berbasis Android,
IOS, Windows Phone, dan Windows Universal Apps.
Xamarin for Android menyediakan kumpulan library yang dapat digunakan untuk bekerja dengan
Android SDK dan Dalvik VM. Xamarin memetakan library yang ada pada Mono CLR ke Dalvik VM
sehingga kita dapat menggunakan C# dan .NET Framework untuk membuat aplikasi Android.
6
Klik kanan pada project – pilih Properties
7
Tools – options - Xamarin
8
9
10
Untuk melihat desain tampilan anda dapat ke folder Resources – layout – Main.xaml
11
Tekan tombol F4 untuk menampilkan properties.
12
SetContentView(Resource.Layout.Main);
---------------------------------
13
//mengambil data bil1 dan bil2
EditText txtBil1 = FindViewById<EditText>(Resource.Id.txtBil1);
EditText txtBil2 = FindViewById<EditText>(Resource.Id.txtBil2);
Button btnHitung = FindViewById<Button>(Resource.Id.btnHitung);
btnHitung.Click += delegate {
double bil1 = Convert.ToInt32(txtBil1.Text);
double bil2 = Convert.ToInt32(txtBil2.Text);
double hasil = bil1 + bil2;
Toast.MakeText(this, "Hasilnya adalah : " + hasil.ToString(),
ToastLength.Long).Show();
};
14
Membuat Aplikasi Protein Tracker
15
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px">
<TextView
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tvHello" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/etHello" />
<Button
android:text="Click Me"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnHello" /></LinearLayout>
//ambil textview
TextView tvHello = FindViewById<TextView>(Resource.Id.tvHello);
//ambil edit text
EditText etHello = FindViewById<EditText>(Resource.Id.etHello);
//ambil button
Button btnHello = FindViewById<Button>(Resource.Id.btnHello);
btnHello.Click += delegate
{
tvHello.Text = etHello.Text;
};
16
private Button btnHello;
//ambil textview
tvHello = FindViewById<TextView>(Resource.Id.tvHello);
//ambil edit text
etHello = FindViewById<EditText>(Resource.Id.etHello);
//ambil button
btnHello = FindViewById<Button>(Resource.Id.btnHello);
btnHello.Click += BtnHello_Click;
17
2.3 MENAMBAHKAN ACTIVITY
Untuk menambahkan Actiity baru, anda bisa klik kanan pada project – kemudian pilih new item
18
Tambahkan TextView.
19
Tambahkan kode berikut agar ketika tombol Help Activity dipilih maka akan ditampilkan Activity baru
yaitu HelpActivity. Untuk memanggil activity lain kita dapat menggunakan object Intent.
Kemudian tambahkan juga kode berikut pada method onCreate untuk mengembalikan nilai yang kita
simpan pada
if (savedInstanceState != null)
{
20
Log.Debug("MasukInstance", savedInstanceState.GetString("HelpStatus"));
tvHelpInfo.Text = savedInstanceState.GetString("HelpStatus");
}
------------------------------------------------
}
21
protected override void OnCreate(Bundle savedInstanceState)
{
Log.Debug("OnCreate", "fase on OnCreate");
-----------------------------------------------
}
22
2.6 MENAMBAHKAN MENU
Untuk menambahkan menu pada android, tambahkan folder menu pada folder Resources, kemudian
tambahkan file xml, beri nama Main_Options.xml
23
if (item.ItemId == Resource.Id.action_refresh)
{
Toast.MakeText(this, "Menu Refresh Dipilih", ToastLength.Short).Show();
}
return base.OnOptionsItemSelected(item);
}
ActionBar.SetDisplayHomeAsUpEnabled(true);
24
Untuk menangani event saat menu dipilih, tambahkan kode berikut:
Kemudian tambahkan context menu tersebut pada salah satu view (sebagai contoh tombol context
menu). Pada method oncreate() tambahkan kode berikut:
25
namespace PassDataBetweenActivity
{
[Activity(Label = "PassDataBetweenActivity", MainLauncher = true, Icon =
"@drawable/icon")]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
btnKirim.Click += delegate
{
var showDataActivity = new Intent(this, typeof(ShowDataActivity));
showDataActivity.PutExtra("Pesan", etPesan.Text);
StartActivity(showDataActivity);
};
}
}
}
Tambahkan layout dengan nama ShowData.axml untuk menampilkan data yang dikirimkan dari halaman
Main.
using Android.Widget;
namespace PassDataBetweenActivity
{
[Activity(Label = "ShowDataActivity")]
public class ShowDataActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
26
// Create your application here
SetContentView(Resource.Layout.ShowData);
Kemudian tambahkan class dengan nama XamarinBlog.cs. kode ini digunakan untuk mendownload data
dari Xamarin Blog dan membaca dokumen XML yang didapatkan.
27
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using System.Xml.Linq;
using System.Net;
namespace XamarinCodeSharing
{
public class XamarinBlog
{
private const string BlogUrl = "http://blog.xamarin.com/feed";
// blog metadata properties
public string Title { get; set; }
public string Link { get; set; }
public List<BlogItem> Items { get; private set; }
28
PublishDate =
DateTime.Parse(WebUtility.HtmlDecode(item.Element("pubDate").Value)),
Description =
WebUtility.HtmlDecode(item.Element("description").Value),
};
blog.Items = items.ToList();
}
return blog;
}
}
}
Kemudian tambahkan kode berikut untuk menggunakan sharing code (PCL) pada aplikasi Windows
Form. Tambahkan kode berikut pada Form1.
29
2.10.3 Membuat Aplikasi Android
Untuk menggunakan class PCL yang sudah kita buat pada aplikasi Android, buka project
XamarinCodeSharing.Droid. Tambahkan referensi System.net.http. Tambahkan juga kode berikut untuk
menampilkan data yang kita ambil dari Xamarin Blog kedalam List.
using System.Collections.Generic;
using System.Linq;
using XamarinCodeSharing;
namespace XamarinCodeSharing.Droid
{
[Activity(Label = "XamarinCodeSharing.Droid", MainLauncher = true, Icon =
"@drawable/icon")]
public class MainActivity : ListActivity
{
private const string TitleKey = "title";
private const string SubtitleKey = "subtitle";
progress.Dismiss();
30
progress.Dispose();
}
}
}
31
3 LAYOUT
Ada beberapa macam layout yang dapat digunakan pada Android, pada bab ini akan dibahas beberapa
contoh layout diantaranya adalah:
• Linear Layout
• Relative Layout
• Table Layout
• Absolute Layout
• Sample Layout Project (Protein Tracker App)
32
Buat layout baru dengan nama RelativeLayout.axml kemudian tambahkan desain berikut:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/relativeLayout1">
<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Type here:" />
<EditText
android:id="@+id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/editbox_background"
android:layout_below="@id/label" />
<Button
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/entry"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dip"
android:text="OK" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/ok"
android:layout_alignTop="@id/ok"
android:text="Cancel" />
</RelativeLayout>
33
Buat Activity baru dengan nama RelativeActivity untuk menampilkan relative layout yang sudah kita
buat sebelumnya:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1">
<TableRow>
<TextView
android:layout_column="1"
android:text="Open..."
android:padding="3dip" />
<TextView
android:text="Ctrl-O"
android:gravity="right"
android:padding="3dip" />
</TableRow>
<TableRow>
<TextView
android:layout_column="1"
android:text="Save..."
android:padding="3dip" />
<TextView
android:text="Ctrl-S"
34
android:gravity="right"
android:padding="3dip" />
</TableRow>
<TableRow>
<TextView
android:layout_column="1"
android:text="Save As..."
android:padding="3dip" />
<TextView
android:text="Ctrl-Shift-S"
android:gravity="right"
android:padding="3dip" />
</TableRow>
<View
android:layout_height="2dip"
android:background="#FF909090" />
<TableRow>
<TextView
android:text="X"
android:padding="3dip" />
<TextView
android:text="Import..."
android:padding="3dip" />
</TableRow>
<TableRow>
<TextView
android:text="X"
android:padding="3dip" />
<TextView
android:text="Export..."
android:padding="3dip" />
<TextView
android:text="Ctrl-E"
android:gravity="right"
android:padding="3dip" />
</TableRow>
<View
android:layout_height="2dip"
android:background="#FF909090" />
<TableRow>
<TextView
android:layout_column="1"
android:text="Quit"
android:padding="3dip" />
</TableRow>
</TableLayout>
35
3.4 GRID VIEW
GridView dapat digunakan jika kita ingin menampilkan data kedalam GridView.
namespace LatihanLayout
{
[Activity(Label = "GridActivity")]
public class GridActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
36
37
4 MEMBUAT LISTVIEW
ListView adalah kontrol yang sangat penting yang ada pada android. ListVirw digunakan untuk
menampilkan data dalam bentuk List.
Pada folder layout tambahkan layout baru dengan nama SampleListView.axml kemudian tambahkan
kode berikut:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="25px"
android:minHeight="25px">
<ListView
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lvData" />
</LinearLayout>
lvData.Adapter = adapter;
38
dialog.SetMessage(value);
dialog.Show();
}
};
}
[Activity(Label = "SimpleListActivity")]
public class SimpleListActivity : ListActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
ListAdapter = adapter;
39
}
};
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:text="Menampilkan Nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnNama" />
<Button
android:text="Menampilkan Nama dan Status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnNamaStatus" />
<Button
android:text="Nama dan Checkbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnNamaCheckbox" />
<ListView
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lvData" />
</LinearLayout>
40
5 MENGGUNAKAN REST WEB SERVICES
Untuk berkomunikasi dengan database yang ada di server/cloud kita membutuhkan web services. Pada
bab ini akan dibahas bagaimana cara untuk bekerja dengan web services berbasis REST.
Buat folder dengan nama Models, tambahkan class dengan nama Mahasiswa.cs.
namespace SampleREST.Models
{
public class Mahasiswa
{
public string Nim { get; set; }
public string Nama { get; set; }
public string Jurusan { get; set; }
public string Email { get; set; }
public double IPK { get; set; }
}
}
Kemudian pada folder Resources/Layout buka file Main.axml, kemudian tambahkan kode berikut:
41
android:id="@+id/lvData" />
</LinearLayout>
Pada layout tersebut dapat dilihat sebuah tombol dengan nama ‘btnCreate’ yang akan digunakan untuk
menambahkan data mahasiswa baru. Kemudian kita juga menambahkan ListView kontrol yang akan
digunakan untuk menampilkan data mahasiswa.
42
{
lstNim.Add(rs.Nim);
data.Add(new JavaDictionary<string, object>
{
{ "Title", rs.Nim + " "+rs.Nama },
{ "Description", rs.Jurusan + " " + rs.IPK.ToString()+ " "+rs.Email }
});
}
//delete mahasiswa
private async Task<HttpResponseMessage> DeleteMahasiswa(string nim)
{
using (var client = new HttpClient())
{
HttpResponseMessage response = await client.DeleteAsync(GetUrl()+nim);
return response;
}
}
btnCreate = FindViewById<Button>(Resource.Id.btnCreate);
btnCreate.Click += delegate
{
Intent addAct = new Intent(this, typeof(AddActivity));
StartActivity(addAct);
};
lvData.ItemClick += LvData_ItemClick;
//delete data
lvData.ItemLongClick += LvData_ItemLongClick;
}
43
{
Toast.MakeText(this, "Data berhasil didelete",
ToastLength.Short).Show();
await IsiDataMahasiswa();
}
});
alert.SetNegativeButton("Cancel", (senderAlert, args) => { });
Dialog dialog = alert.Create();
dialog.Show();
}
44
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/txtJurusan" />
<TextView
android:text="Email"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textviewEmail" />
<EditText
android:inputType="textEmailAddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/txtEmail" />
<TextView
android:text="IPK"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView5" />
<EditText
android:inputType="numberDecimal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/txtIPK" />
<Button
android:text="Save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnSave" />
<Button
android:text="Delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnDelete" />
</LinearLayout>
using SampleREST.Models;
using System.Net.Http;
using Newtonsoft.Json;
using System.Threading.Tasks;
namespace SampleREST
{
[Activity(Label = "Add Mahasiswa")]
public class AddActivity : Activity
{
private EditText txtNim;
private EditText txtNama;
private EditText txtJurusan;
private EditText txtEmail;
private EditText txtIPK;
private Button btnSave;
45
{
var url = @"http://webapiazure72130049.azurewebsites.net/api/Mahasiswas/";
return url;
}
txtNim = FindViewById<EditText>(Resource.Id.txtNim);
txtNama = FindViewById<EditText>(Resource.Id.txtNama);
txtJurusan = FindViewById<EditText>(Resource.Id.txtJurusan);
txtEmail = FindViewById<EditText>(Resource.Id.txtEmail);
txtIPK = FindViewById<EditText>(Resource.Id.txtIPK);
btnSave = FindViewById<Button>(Resource.Id.btnSave);
btnSave.Click += BtnSave_Click;
}
using SampleREST.Models;
using System.Net.Http;
using Newtonsoft.Json;
46
using System.Threading.Tasks;
namespace SampleREST
{
[Activity(Label = "Edit Mahasiswa")]
public class EditActivity : Activity
{
private EditText txtNim;
private EditText txtNama;
private EditText txtJurusan;
private EditText txtEmail;
private EditText txtIPK;
private Button btnSave;
private string Nim;
Nim = Intent.GetStringExtra("Nim");
txtNim = FindViewById<EditText>(Resource.Id.txtNim);
txtNama = FindViewById<EditText>(Resource.Id.txtNama);
txtJurusan = FindViewById<EditText>(Resource.Id.txtJurusan);
txtEmail = FindViewById<EditText>(Resource.Id.txtEmail);
txtIPK = FindViewById<EditText>(Resource.Id.txtIPK);
47
txtNim.Enabled = false;
var mhs = await GetDataMahasiswaByNim(Nim);
txtNim.Text = mhs.Nim;
txtNama.Text = mhs.Nama;
txtJurusan.Text = mhs.Jurusan;
txtEmail.Text = mhs.Email;
txtIPK.Text = mhs.IPK.ToString();
btnSave = FindViewById<Button>(Resource.Id.btnSave);
btnSave.Click += BtnSave_Click;
}
48
49