Home > Uncategorized > က်ေနာ္ သိေသာ Android အေၾကာင္း (5)

က်ေနာ္ သိေသာ Android အေၾကာင္း (5)

How to Create a Button on Android

ဒီတပတ္ေတာ့ Android ေပၚမွာ Button ေတြဘယ္လိုု တည္ေဆာက္တယ္ဆိုုတာေလ ကိုု tutorial ေလးတခုုျပခ်င္ပါတယ္။ ျပီးေတာ့ Android App  တခုုမွာပါ၀င္တဲ့ ဖုုိင္ေတြအေၾကာင္းလဲ အနည္းငယ္တင္ျပေဆြးေႏြးလိုုပါတယ္။

ပထမကေတာ့ Android installation လုုပ္ပုုံကိုု ေရးသားမလိုု ့ပါဘဲ။ ဒါေပမယ့္အရမ္းလဲမခက္ခဲတဲ့ အတြက္ မေရးသားျဖစ္ေတာ့တာပါ။ သင့္အေနနဲ ့Android SDK မသြင္းထားရေသးဘူးဆိုုရင္ေတာ့ http://developer.android.com/ သြားေရာက္ကာ မိမိအသုုံးျပဳေနတဲ့ OS အလိုုက္ SDK ကိုု download ျပဳလုုပ္ကာ သြင္းပါ။ SDK မသြင္းခင္ JDK ကိုု အရင္သြင္းပါ။ ဒီအဆင့္ေတြက one click install ေတြမိုု ့အဆင္ေျပမွာပါ။ က်ေနာ္တိုု ့အတြက္ ျပႆနာက အရမ္းေနွးတဲ့ ကြန္နက္ရွင္မွာ platform tools ေတြေဒါင္းရမယ့္ျပႆနာျဖစ္ေကာင္းျဖစ္နုုိင္ပါတယ္။

Android မွာ Button တခုုေရးဖိုု ့ဘာမွမခက္လွပါဘူး android.widget.Button ဆိုုတဲ့ class ေလးကိုု သုုံးျပီး သာမန္ button တခုုကိုု ေရးသားလိုုက္တာပါပဲ။  ခုုေရးသားမယ့္ post ေလးမွာေတာ့ button ေလးကိုု နွိပ္ရင္ web page တခုုသြားမယ္ ျပီးရင္ Android ရဲ ့browser ေပၚမွာ website ေလးျပသမယ္ေပါ့။

ပထမဦးဆုုံးအေနနဲ ့ Eclipse တြင္ File > New > Other > Android Project ကိုုေရြးပါ။ Eclipse ကိုုပထမဆုုံး run ခ်ိန္မွာသာ Android Project ကိုု ယခုနည္းနဲ ့ေခၚယူရေသာ္လည္း ေနာက္အေခါက္မ်ားမွာေတာ့ File > New > Android Project အျဖစ္ တိုုက္ရိုုက္ ေခၚယူနုုိင္ပါတယ္။

(၁) New Project Prompt box (Dialog windows) တြင္ ျဖည့္စြက္ရမွာေတြက အနည္းငယ္ ရွင္းျပလိုုပါတယ္။ ပထမဆုုံး အေနနွင့္ က်ေနာ္တိုု ့ Project Name ကိုုျဖည့္စြက္ရမွာျဖစ္ပါတယ္။ ဒီလိုု ပေရာဂ်က္ နာမည္ကိုု သတ္မွတ္ရာမွာ ကြက္လပ္မျခားဘဲ (space မပါ၀င္ပဲ) စကားလုုံး တစ္လုုံးတည္းျဖစ္ေအာင္ ေပးရပါမယ္။ အေကာင္းဆုုံးကေတာ့ CamelCase Naming system ပဲျဖစ္ပါတယ္။ (CamelCase ဆိုုတာကေတာ့ iPad ၊ iPhone  ၊ MacDonald တိုု ့လိုု ့တစ္လုုံးနွင့္ တလုုံးၾကား space ကြက္လပ္မ်ား ပါ၀င္ျခင္းမရွိပဲ စကာလုုံး တစ္လုုံးတည္းအျဖင့္ ေရးသားတဲ့ပုုံစံကိုု ဆိုုလိုုျခင္းျဖစ္ပါတယ္) ဒီလိုု ေရးသား နာမည္ေပးရာတြင္ သက္ဆုုိင္၇ာ ပေရာဂ်က္နွင့္လိုုက္ဖတ္ဖိုု ့ေတာ့လိုုပါသည္။ ယခုု က်ေနာ္တိုု ့ပေရာဂ်က္သည္ button တခုုစမ္းသပ္တဲ့ ပေရာဂ်က္ျဖစ္တဲ့အတြက္ ButtonTutorial ဆိုုျပီ meaningful ျဖစ္ေသာ နာမည္မ်ဳိးေပးသင့္ပါတယ္။ Project Name သည္ Eclipse ၏ တည္ေဆာက္မွဳ Eclipse construct ျဖစ္သည္။  Eclipse သည္ အရာအားလုုံးကိုု project မ်ားအျဖစ္ သီးျခားစီခြဲထုုတ္ စုုစည္းထားသည္။

Image


(၂) ဒီအဆင့္ျပီးတဲ့အခ်ိန္မွာ Build Target ကိုု ေ၇ြးရတဲ့အဆင့္ပဲျဖစ္ပါတယ္။ build target ေရြးရတာကေတာ့ က်ေနာ္တိုု ့ေ၇းသားတ့ဲ ပေရာဂ်က္က မည္သည့္ version အတြက္ ေရးသားမွာလဲဆိုုတာကိုု ေျပာၾကားမွာျဖစ္ပါတယ္။ ဥပမာ သင့္အေနနဲ ့Android version 4.0.3 အတြက္ေ၇းသားမည္ app စသည္ျဖင့္ သတ္မွတ္နုုိင္ပါသည္။ Build Target (panel) ထဲတြင္  က်ေနာ္တိုု ့ေနာက္ထပ္ ထပ္သြင္းထားသည့္ platform မ်ားနွင့္ add-on မ်ားကိုု list ျဖင့္ျပသမည္ျဖစ္သည္။ က်ေနာ္ကေတာ့ ေနာက္ဆုုံးဗားရွင္း အသစ္ကိုုသာေရြးလိုုက္ပါမယ္။ သင့္အေနနဲ ့မိမိစိတ္ၾကိဳက္ SDK version ကိုုေရြးနုုိင္ပါတယ္။ Google APIs အမည္ နဲ ့ target မ်ားကိုု မေရြး ဖိုု ့အၾကံျပဳပါရေစ။ ၄င္းတိုု ့သည္ Android Platform အတြက္ Google ၏ မူပိုုင္ မ်ားျဖစ္သည္။ Android ရဲ ့Open Source version မ်ားကိုုသာ အသုုံးျပဳျခင္းက ေနာက္ေၾကာင္း ပိုုရွင္းပါတယ္။ က်ေနာ္တိုု ့အေနနဲ ့copyrigh မူပိုုင္ခြင့္ကိစၥကိုု ေပါ့ေသးေသးမထားသင့္ေတာ့ေပ အားလုုံးစဥ္းစားထားဖိုု ့လိုုအပ္လာျပီျဖစ္ပါတယ္။)

Image

(၃) Project ရဲ ့ properties မ်ားကိုု ျဖည့္စြက္ရတဲ့အခါ application name ဟာ system နဲ ့မသက္ဆုုိင္တဲ့အတြက္ ကိုုယ္ေပးခ်င္တဲ့ application name ကိုုၾကိဳက္နွစ္သက္သလိုု စာလုုံးအထားအသိုုပဲျဖင့္ျဖင့္  (space)ပါျပီးေတာ့ပဲျဖင့္ျဖင့္ ေပးနုုိင္ပါတယ္။ အေပၚမွာေျပာခဲ့သလိုု Meaningful ျဖစ္ဖိုု ့ေတာ့လိုုတာေပါ့ေနာ္။

(၄) Package Name ဟာ Java ရဲ ့အေရးပါတဲ့တည္ေဆာက္မွုု  (Java Contract) တခုုျဖစ္ပါတယ္။ နားလည္ေအာင္ေျပာရရင္ ေတာ့ Folder တခုုနဲ ့ဆင္တူပါတယ္။ က်ေနာ္တိုု ့က သက္ဆုုိင္ရာ Folder ေတြထဲမွာ သက္ဆိုုင္ရာ files ေတြကိုု စုုစည္းသိမ္းဆည္းပါတယ္။ flies ေတြကိုု Java ရဲ ့ classes မ်ားအျဖင့္ ျမင္နုုိင္ပါတယ္။ ဒီေတာ့ က်ေနာ္တိုု ့က  folder ကိုု လုုပ္ပိုုင္ခြင့္ (permission) ကန္ ့သတ္တာပဲျဖင့္ျဖင့္ ဘာပဲ လုုပ္လုုပ္ အထဲက ဖိုုင္ေတြကိုုပါ သက္ေရာက္ပါတယ္။ အထဲက fliel လိုုခ်င္ရင္ folder ကိုု အရင္ဖြင့္ ေခၚသုုံးရသလိုုေပါ့။Java programming မွာ source code ေတြကိုု package မ်ားအျဖစ္ သီးျခားစြာခြဲထုုတ္ စုုစည္းပါတယ္။ ဒါေၾကာင့္ Package ေတြဟာ အလြန္ကိုု အေ၇းပါ ပါတယ္။ဘာေၾကာင့္လဲဆိုုေတာ့ ကိုုယ့္ပေရာဂ်က္ ထဲမွာရွိတဲ့ Java class မ်ဳိးစုုံၾကားထဲမွာ Object မ်ားကိုု class အခ်င္းခ်င္း ေတြ ့ေစသတ္မွတ္ထားတာေၾကာင့္ျဖစ္ပါတယ္။ Android မွာလဲ package မ်ားဟာ apps ေတြကိုု sign လုုပ္ရာတြင္အေရးပါပါတယ္။ Android developer အမ်ားစုုကေတာ့ package name ေတြကိုု သူတိုု ့website domain name ေတြရဲ ့ေျပာင္ျပန္ပုုံစံနဲ ့ေပးေလ့ရွိပါတယ္။ ဥပမာ m51a.com ဆိုုပါေတာ့ သူတိုု ့ေရးသားမယ္ apps ကိုု com.m51a.ButtonTutorial အစရွိသျဖင့္ ေပးၾကပါတယ္။ com.example.yourappName ေပါ့။

Image

(၅) Min SDK Version ဆိုုတာက  အနွိပ္ဆုုံး minimum Android version ကိုု API level ျဖင့္ ေဖာ္ျပေလ့ရွိတာကိုုေျပာတာပါ။ ကိုုယ့္ app ကိုု run မည့္ device ၇ဲ ့ လိုုအပ္ခ်က္ (spec) ျဖစ္ပါတယ္။ API နွိပ္နုုိင္သမ်ွ နိပ္ေလ ကိုုယ့္ app ကိုု version အေတာ္မ်ားမ်ားမွာသုုံးနုုိင္ေလျဖစ္မွာပါ။

ကဲ ဒါဆိုု အေပၚမွာေျပာခဲ့တဲ့အတုုိင္း ပထမဦးဆုုံး  File > New > Other > Android Project ကိုုေရြးပါ ျပီးရင္ေတာ့ Project Name မွာ ButtonTutorial လိုု ့ေပးလိုုက္ပါ။ ျပီးရင္ ကိုုယ္ app ဘယ္ version မွာ run မယ္ဆိုုတာ Target ေရြးပါ။ ျပီးရင္ေတာ့ Application Name ကိုု အေပၚမွာေျပာခဲ့သလိုု မိမိစိတ္ၾကိဳက္ေပးလိုု ့ရပါတယ္။ Project name သာ space ပါ၀င္လိုု ့မရတာပါ။ Default အေနနဲ ့ေတာ့ project name လာေပၚေနပါလိမ့္မယ္။ ခုုက tutorial မိုု ့ ျပင္ခ်င္လဲ ျပင္ မျပင္ခ်င္လဲဒီတုုိင္းထားခဲ့လိုုက္လိုု ့ရပါတယ္။ Package name ကိုုေတာ့ က်ေနာ္ကေတာ့ com.m51a.ButtonTutorial လိုု ့ေပးထားလိုုက္ပါတယ္။ min SDK version ကိုုလဲ မိမိ နွစ္သက္ သလိုုသာေရြးခ်ယ္ပါ။ ဘယ္လိုုဘာေၾကာင့္ေရြးရသလဲဆိုုတာ အေပၚမွာရွင္းျပထားျပီးျဖစ္ပါတယ္။

အဆင့္ (၁) အေနနဲ ့ Button ကိုု ေပၚေအာင္ XML file မွာ ေရးသားဖိုု ့လိုုပါတယ္။ ပထမဆုုံး res/layout/main.xml ကိုုဖြင့္ျပီး ေရးသားပါမယ္။

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android&#8221;
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:orientation=”vertical” >

<Button
android:id=”@+id/button1″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Button – Go to M51a.com” />
</LinearLayout>

ယခုုအတုုိင္းျပင္ဆင္ ေရးသားလိုုက္ပါတယ္။

Image

Layout file သည္ screen ေပၚတြင္ ေပၚေန သည္ button ေတြ ပုုံေတြ စာသားေတြ စတာေတြပုုံ ပုုံစံခ် အခင္းအက်င္းကိုုသတ္မွတ္သည့္ ဖုုိင္ျဖင့္သည္။ အရိုုးရွင္းဆုုံးေျပာရလ်ွင္ေတာ့ ဒီဇုုိင္ အခင္းအက်င္း သတ္မွတ္တဲ့ဖိုုင္ျဖစ္ပါတယ္။ mobile device ေတြမွာ သုုံးစရာ ျပသစရာ screen ေတြကလဲ ဒီတခုုတည္းရွိေတာ့ Desktop apps ေတြမွာလိုု form အမ်ဳိးမ်ဳိးကိုု ျပသနုုိင္ျခင္းမ်ဳိးမရွိပါဘူး။ ဒီလိုု ဒီဇုုိင္းခ်ထားတဲ့ object ေတြကိုု ေနာက္ကြယ္က Java file က ေမာင္းနွင္ေနတာပဲျဖစ္ပါတယ္။ ခုု က်ေနာ္တိုု ့screen ေပၚမွာ ေပၚဖိုု ့ရာအတြက္ အေပၚက code မ်ားေၾကာင့္ျဖစ္ေပၚလာရတာပါ။  Button တခုုကိုု ေရးသားထားျပီး id တခုုေပးထားပါတယ္။ ျပီးေတာ့ width နွင့္ height ကိုုသတ္မွတ္ထားျပီး Button  ေပၚမွာ Go to M51a.com လိုု ့ေရးသားထားပါတယ္။

ေနာက္တဆင့္အေနျဖင့္  src  ထဲက com.m51a.ButtonTutorial Package ထဲမွ ButtonTutorialActivity.java ဖိုုင္ကိုု ေအာက္ပါအတုုိင္းျပင္ဆင္ေရးသားပါမယ္။

package com.m51a.ButtonTutorial;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;

public class ButtonTutorialActivity extends Activity {
/** Called when the activity is first created. */
Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

addListenerOnButton();
}

public void addListenerOnButton(){
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener(){

public void onClick(View arg0){

Intent browserIntent =
new Intent(Intent.ACTION_VIEW, Uri.parse(“http://www.m51a.com&#8221;));
startActivity(browserIntent);
}
});

}
}

save လုုပ္က Run ၾကည္ပါ။ Java Source code file   Andorid app အတြက္အရာရာကိုု ကိုု ေမာင္းနွင္ေသာ ဖိုုင္လိုု ့ေျပာလိုု ့ရပါတယ္။ ၄င္း file ကိုု Dalvik Executable ေျပာင္းလဲကာ app ကိုု run တာျဖစ္ပါတယ္ ယခင္ အပိုုင္းမ်ားမွာလဲ compilation မ်ားအေၾကာင္းကိုု ေျပာၾကားခဲ့ျပီးျဖစ္ပါတယ္။

mainfest file ကေတာ့ app တြင္ မည္သည့္ တိုု ့ပါ၀င္သည္ အဓိက buliding block မ်ားမွာ မည္သည္တိုု ့ျဖစ္သည္ မည္သိုု ့ေသာ သတ္မွတ္ခ်က္မ်ာလိုုအပ္သည္ စသည္တိုု ့ကိုု ရွင္းျပထားေသာ component အားလုုံးကိုု ေပါင္းစည္ခ်ိတ္ဆက္ေပးတဲ့ စာရင္းဖိုုင္ တဖိုုင္လိုု ့ေျပာလိုု ့ရပါတယ္။

ဒါကေတာ့ ခုု tutorial ရဲ ့MainFest XML ဖိုုင္ကိုု ေရးသားထားတာပဲျဖစ္ပါတယ္။

<?xml version=”1.0″ encoding=”utf-8″?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android&#8221;
package=”com.m51a.ButtonTutorial”
android:versionCode=”1″
android:versionName=”1.0″ >

<uses-sdk android:minSdkVersion=”15″ />

<application
android:icon=”@drawable/ic_launcher”
android:label=”@string/app_name” >
<activity
android:name=”.ButtonTutorialActivity”
android:label=”@string/app_name” >
<intent-filter>
<action android:name=”android.intent.action.MAIN” />

<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
</application>

</manifest>

အနည္းငယ္ဖတ္ၾကည့္ရင္ နားလည္မယ္လိုု ့ေမ်ွာ္လင့္္ပါတယ္။

Strings Files ကေတာ့ app တခုုလုုံးမွာ ပါရွိသမ်ွစာသားေတြကိုု သိမ္းဆည္းတဲ့ XML ဖိုုင္လ္ တစ္ဖိုုင္ျဖစ္ပါတယ္။ ဆိုုလိုသည္မွာ Layout XML ဖိုုင္လ္မွာ button ေတြ text area ေတြ lable စတဲ့ widget  ေတြ ရဲ ့အခင္းအက်င္းမ်ား သက္သက္သာ သက္ဆုုိင္ျပီး String XML file ကေတာ့ widget ေတြမွာ ပါ၀င္တဲ့ စာသားမ်ား ၄င္းတိုု ့၏ အမည္ နာမေတြ ေတြျဖင့္တဲ့ button တိုု ့၏ နာမည္မ်ား Lable မ်ား default text မ်ား နွင့္ အလားတူ အျခားစာသားမ်ားကိုု သီးသန္ ့သိမ္းဆည္းတဲ့ ဖိုုင္ တခုုျဖစ္ပါတယ္။

<?xml version=”1.0″ encoding=”utf-8″?>
<resources>

<string name=”hello”>Hello World, ButtonTutorialActivity!</string>
<string name=”app_name”>ButtonTutorial</string>

</resources>

R file ကေတာ့ java srource code မ်ားနွင့္ resource  ေတြကိုုၾကားမွ ေပါင္းကူးေပးတဲ့ ဖိုုင္မ်ဳိးျဖစ္ပါတယ္။ R file သည္ အလိုုအေလ်ွာက္ ဖန္တီးေသာဖိုုင္ျဖစ္ပါတယ္ ဒါေၾကာင့္ ၄င္းကိုု ျပင္ဆင္ဖိုု ့မလိုုအပ္ပါဘူး။ ဥပမာ ပုုံတပုုံထပ္တိုုးလိုုက္တာ xml ဖိုုင္လ္ တစ္ ဖိုုင္လ္ ထပ္တိုုးလိုုက္ျခင္း စတဲ့ res  (folder) တြင္းေျပာင္းလဲမွုုျပဳလုုပ္တုုိင္း R file ကိုု အလိုု အေလ်ွာက္ အသစ္ ျပန္လည္ တည္ေဆာက္ပါတယ္။ တခါတေလမွာေတာ့ R file အတြင္းမွ data ကိုုယူသုုံးၾကေပမယ့္ Eclipse IDE ကသာ အလိုုအလ်ွာက္လုုပ္ေပးတာမ်ားပါတယ္။

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found.  It
* should not be modified by hand.
*/

package com.m51a.ButtonTutorial;

public final class R {
public static final class attr {
}
public static final class drawable {
public static final int ic_launcher=0x7f020000;
}
public static final class id {
public static final int button1=0x7f050000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}

Emulator  ဆိုုတာ က်ေနာ္ ပထမ အပိုုင္းေတြမွာ ေဆြးေႏြးခဲ့သလိုု Android Developer တစ္ဦးအေနနဲ ့မိaptးသားထားတဲ့ Android Apps မ်ားကိုုစမ္းသက္ဖိုု ့Android device တလုုံးမ၀ယ္နုုိင္လဲျဖစ္ပါတယ္။ ဘာေၾကာင့္လဲဆိုုေတာ့ Emulator ေၾကာင့္ပါပဲ။ က်ေနာ္တိုု ့ရဲ ့ေရးျပီးသား Apps ပဲျဖင့္ျဖင့္ သူမ်ားရဲ ့Apps ကိုုစမ္းသပ္လိုုတာပဲျဖင့္ျဖင့္ Apps မ်ားကိုု Mobile deveice ေပၚတြင္ run သည္နွင့္ Emulator တခုုေပၚတြင္ run သည္မွာ မည္သိုု ့မ်ွ မျခားနားလွပါ။ Mobile device တခုုကဲ့သိုု ့လုုပ္ေဆာင္နုုိင္ေအာင္ တီထြင္ထားတာမ်ဳိးျဖစ္ပါတယ္။ အတုုဆိုုေသာ္လည္း devices ေပၚတြင္ Machine အလႊာ တုုိင္သည့္ အထိ run ေသာ code မ်ားကိုုပင္ run ေပးနိုုင္ပါတယ္။ ဒီေန ရာမွာ က်ေနာ္ အေနနဲ ့ထပ္မံ ေဆြးေႏြးလိုုတာက Simulator နွင့္ Emulator တိုု ့ရဲ ့ကြားျခားခ်က္ပဲျဖစ္ပါတယ္။ ၄င္းတိုု ့(၂) ခုုမွာ အေခၚအေ၀ၚအားျဖင့္ နီးစပ္ေသာ္လည္း အလုုပ္လုုပ္ပုုံျခင္းမွာ အေျခခံမွစျပီး လုုံး၀ကြာျခားပါသည္။ Emulator ေတြကေတာ့ binary code ကိုု execute လုုပ္ေပးပါျခင္း ျဖစ္၍ Emulator သည္ virtual machine/ virtual device ျဖစ္ပါတယ္။ Simulator ဆိုုသည္ကေတာ့ binary code  ထိေအာင္ မဆင္းဘဲ high level မွာတြင္သာလ်ွင္ code တစ္ခုု၏ လုုပ္ေဆာင္ခ်က္ကိုု တုုပဖန္တီးေပးျခင္းျဖစ္သည္။

 

Ref : The Basic Principle of Developing Android Applications (Sayar Win Hein);

Categories: Uncategorized
  1. No comments yet.
  1. No trackbacks yet.

Leave a comment