Android Development 6: Android Manifest & Intents

person Myat Min Soefolder_openAndroid Developmentaccess_time May 21, 2016

Android Manifest & Intents

Android Manifest

Android Application တိုင်းမှာ AndroidManifest.xml ဆိုတာပါဝင်ပါတယ်။ Manifest ထဲမှာ Application ရဲ့ အကြောင်းအရာတွေကိုသိမ်းထားပါတယ်။ Application ရဲ့ java package name, Application Icon, Application ထဲမှာပါဝင်တဲ့ Activity တွေ Service, Provider, Receiver အစရှိတာတွေပါဝင်ပါတယ်။ Application မှာအသုံးပြုမဲ့ permission တွေ (ဥပမာ location, storage access) အစရှိတာတွေကိုလဲ Manifest ထဲမှာထည့်ရေးရပါတယ်။ စာအုပ်တစ်အုပ်ရဲ့ မာတိကာလိုပါပဲ။ Manifest ကိုကြည့်လိုက်ရင် Application ဘယ်လိုအလုပ်လုပ်မယ်ဆိုတာသိနိုင်ပါတယ်။

Android Intents

Android Intent ဆိုတာကတော့ Android Component (Activity, Service, Provider, etc…) အချင်းချင်း ဆက်သွယ်ပေးတဲ့ Object ပဲဖြစ်ပါတယ်။ ဥပမာ Application တစ်ခုကနေ Camera ကိုဖွင့်လိုက်တဲ့အခါ Intent ကနေတဆင့်ဆက်သွယ်လိုက်တာပဲဖြစ်ပါတယ်။ Intent အချင်းချင်း data ပို့ဖို့အတွက် Bundle ကိုအသုံးပြုနိုင်ပါတယ်။ Bundle ထဲမှာ key, value store စနစ်နဲ့ data တွေကိုပို့နိုင်ပါတယ်။

Manifest နဲ့ Intent ကိုလက်တွေ့စမ်းသပ်ဖို့အတွက် activity_main.xml ကိုဖွင့်ပြီး Button တစ်ခုကိုအလယ်တဲ့တဲ့မှာထားလိုက်ပါ။ နှစ်သက်ရာ LayoutManager ကိုသုံးနိုင်ပါတယ်။ Button ရဲ့ ID ကို btnStart လို့ပေးလိုက်ပါ။ text ကိုတော့ Click Me လို့ပေးလိုက်ပါ။ android:onClick=”go”
ဆိုပြီး attribute တစ်ခုထပ်ထည့်လိုက်ပါ။ အောက်မှာတော့ relative layout ကိုအသုံးပြုပြီး button တစ်ခုဆောက်ထားပါတယ်။

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btnStart"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:onClick="go"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click Me" />

</RelativeLayout>

MainActivity.java မှာ Button Object တစ်ခုကြေငြာပြီး button လို့နာမည်ပေးလိုက်ပါ။

အပေါ်မှာ import android.widget.Button; ဆိုပြီး import လုပ်ရပါလိမ့်မယ်။ import နဲ့အလုပ်မရှုပ်ချင်ရင် Android Studio Settings (Preferences) ထဲက Editor -> General -> Auto Import မှာ Optimize imports on the fly ကို အမှန်ခြစ်ထားလိုက်ပါ။ onCreate() method ထဲက setContentView() အောက်မှာ

button = (Button) findViewById(R.id.btnStart);

လို့ထည့်လိုက်ပါ။ နောက်ပြီး MainActivity ထဲမှာ public void go (View v) {} ဆိုပြီး method တစ်ခုထည့်လိုက်ပါ။ ဒါဆို အောက်ကအတိုင်းဖြစ်နေပါပြီ။

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.btnStart);
    }

    public void go(View v) {

    }

}

Button မှာ onClick=“go” လို့ထည့်ထားတဲ့အတွက် သူ့ကိုနှိပ်လိုက်တဲအခါ Activty ထဲမှာ go ဆိုတဲ့ method ကိုရှာပါလိမ့်မယ်။ Buton onClick မှာထည့်ထားတဲ့ method က public ဖြစ်ရပါမယ်။ return မပြန်ရပါဘူး။ View object တစ်ခုကို parameter အဖြစ်လက်ခံရပါမယ်။ ဒါကြောင့် public void go (View v) ဆိုပြီး method အလွတ်တစ်ခုဆောက်ထားပါ။ ခလုပ်နှိပ်လိုက်ရင် go method ထဲက code တွေအလုပ်လုပ်မှာဖြစ်ပါတယ်။

Button Object တစ်ခုကို button လို့နာမည်ပေးပြီး ကြေငြာထားပါတယ်။ findViewByID() method ကလဲ int ကို parameter ပေးရပါတယ်။ xml မှာ id တစ်ခုပေးလိုက်တာနဲ့ R class ထဲက id class မှာ id နာမည်နဲ့ static int တစ်ခုကို အလိုလိုသွားဆောက်ထားပါတယ်။ findViewById() method က View object တစ်ခုကို return ပြန်ပါတယ်။ return ပြန်လာတဲ့ View object ကို Button Object ဖြစ်အောင် (Button) ဆိုပြီး casting လုပ်လိုက်ပါတယ်။ ရလာတဲ့ Button ကို button ထဲထည့်လိုက်ပါတယ်။ ဒါဆို button က btnStart ကို ကိုယ်စားပြုသွားပါပြီ။

နောက် Activity အသစ်တစ်ခုထပ်လုပ်ရအောင်။ New > Activity > Empty Activity ကိုရွေးပြီး SecondActivity လို့ထည့်လိုက်ပါ။ Generate Layout File မှာအမှန်ခြစ်ပြီး Launcher Activity မှာ အမှန်မခြစ်ပါနဲ့။ Finish ကိုနှိပ်လိုက်ပါ။

6_01

Android Manifest ကိုဖွင့်ကြည့်လိုက်ရင် ဆိုပြီး တစ်ကြောင်းအပိုပါလာတာကိုတွေ့ရပါလိမ့်မယ်။ Activity အသစ်တစ်ခုကို Manifest ကကြေငြာလိုက်တာပါ။ res > layout ထဲမှာလဲ activity_second.xml ဆိုပြီး layout file အသစ်တစ်ခုဆောက်သွားပါလိမ့်မယ်။ java package ထဲမှာလဲ SecondActivity.java ဆိုပြီး Activity class တစ်ခုဆောက်လိုက်တာတွေ့ရပါလိမ့်မယ်။ New နဲ့ Activity မလုပ်ပဲ ကိုယ့်ဟာကို Manifest, Java Class, Layout အကုန်တစ်ခုခြင်း create လုပ်လဲရပါတယ်။

activity_second.xml ကိုဖွင့်ပြီး TextView တစ်ခုထည့်လိုက်ပါ။ text မှာ “Hello World!” လို့ရေးထားလိုက်ပါ။ android:textColor=“#F44336” ဆိုပြီး color ပြောင်းလို့လဲရပါတယ်။ textColor attribute ကတော့ TextView ရဲ့အရောင်ကို ပြောင်းတာဖြစ်ပြီး နောက်မှာ Hex တန်ဖိုးထည့်ပေးရပါတယ်။ codeအပြည့်အစုံကတော့ အောက်ကအတိုင်းပါ။

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.myatminsoe.tutorial.SecondActivity">

    <TextView
        android:id="@+id/hello"
        android:text="@string/hello"
        android:textColor="#F44336"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

ဒါဆို SecondActivity တစ်ခုဆောက်လို့ပြီးပါပြီ။ MainActivity ကနေ SecondActivity ကို Intent ကနေတစ်ဆင့်သွားကြည့်ရအောင်။ go() method ထဲမှာ Intent တစ်ခုဆောက်ပါမယ်။ startActiivty() method ကိုအသုံးပြုပြီး နောက် Activity တစ်ခုပွင့်လာအောင်လုပ်ဆောင်ပါမယ်။

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.btnStart);
    }

    public void go(View v) {
        Intent i = new Intent(this, SPActivity.class);
        startActivity(i);
    }

}

ဒါဆိုရင် i ဆိုတဲ့ Intent Object တစ်ခုဆောက်ပြီးပါပြီ။ ပထမ Parameter တစ်ခုကတော့ context ဖြစ်ပြီး this လို့ပဲရေးထားပါတယ်။ ဒုတိယ Parameter ကတော့ Class ပါ။ startActivity() method ကတော့ Intent Object ကို parameter အဖြစ်လက်ခံပြီး Activty တစ်ခုကို စစေပါတယ်။ run ကြည့်ပါ။ Click Me ဆိုတဲ့ Button ကိုနှိပ်လိုက်ရင် SecondActivity ပွင့်လာမှာဖြစ်ပြီး HelloWorld! ဆိုတဲ့ အနီရောင်စာပေါ်လာမှာပဲဖြစ်ပါတယ်။

Android Context

Android Context ဆိုတာကတော့ Application ထဲမှာ ဘာတွေဖြစ်နေပြီလဲဆိုတာ Object တစ်ခုကိုပြောတဲ့အခါမှာသုံးပါတယ်။ Application ရဲ့ resources တွေကို ယူသုံးတဲ့အခါမှာလဲ Context ကတစ်ဆင့်ပဲယူသုံးရပါတယ်။ Context ကနေ Device ရဲ့ version တွေ model တွေယူလို့ရပါတယ်။ Context ကိုတောက်လျှောက်သုံးမှာဖြစ်တဲ့အတွက် နောက်ပိုင်းအသုံးပြုမှုတွေမှာ Context ကိုဘယ်လိုယူရမလဲ ဘယ်လိုပို့ရမလဲဆိုတာ ရင်းနှီးသွားမှာဖြစ်ပါတယ်။

Comments

  1. ေက်းဇူးပါ

  2. ဆရာ ေပးထားတဲ့ code ကို copy ကူးထည့္တာ
    Intent i=new Intent(this,SPActivity.class)
    မွာ SPActivity ကို cannot resolve symbol ဆိုျပီerror တက္ေနပါတယ္ အဲ့တာ ဘယ္လိုမ်ိဳးလုပ္ေပးရမွာလဲ

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>