Android Development 7: Android Resources

person Myat Min Soefolder_openAndroid Developmentaccess_time May 21, 2016

Android Resources

Android Resource ဆိုတာကတော့ Application မှာအသုံးပြုမဲ့ ပုံတွေ၊ animation တွေ၊ စာသားတွေ၊ အရောင်တွေ အစရှိတာတွေကို သိမ်းထားတာပဲဖြစ်ပါတယ်။

Drawable Resources

drawable resource ထဲမှာတော့ ကိုယ့် application ထဲမှာ သုံးပဲ ပုံတွေ design တွေကို သိမ်းဖို့အသုံးပြုပါတယ်။ res > drawable folder ထဲမှာ new > drawable resource file ဆိုတာရွေးပြီး button လို့နာမည်ပေးလိုက်ပါ။ button.xml ဆိုပြီး xml file တစ်ခုရပါလိမ့်မယ်။ xml ထဲမှာ အောက်ကအတိုင်းရေးလိုက်ပါ။

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="#2b6018" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#55c32e" />
        </shape>
    </item>
</selector>

ဒါဆိုရင် drawable တစ်ခုဆောက်ပြီးပါပြီ။ selector drawable တစ်ခုဆောက်ပြီးပါပြီ။ selector drawable ဆိုတာကတော့ နှိပ်လိုက်တဲ့အခါဘယ်လိုဖြစ်မယ် နှိပ်နေတုန်းဘယ်လိုဖြစ်မယ် အစရှိသဖြင့် state တွေအလိုက် drawable ပြောင်းချင်တဲ့အခါသုံးပါတယ်။

layout ထဲက activity_main.xml ကိုဖွင့်ပါ။ Button မှာ android:background=”@drawable/button”
ဆိုတာထည့်လိုက်ပါ။ ဒါဆို အပြည့်ဆုံးက အောက်ကအတိုင်းဖြစ်သွားပါပြီ။

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

    <Button android:background="@drawable/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>

ဒီအတိုင်းပြောင်းပြီး run ကြည့်ပါ။ Button ကအစိမ်းရောင်ဖြစ်ပြီး နှိပ်လိုက်တဲ့အချိန်မှာ အစိမ်းရင့်ရောင်ဖြစ်တာတွေ့ရပါလိမ့်မယ်။ ဒါက drawable resource တစ်ခုသုံးပြီး button background ကိုပြောင်းလိုက်တာပါ။
drawable ထဲမှာနောက်ထပ် bitmap, nine-patch, layer-list, level-list အစရှိတာတွေအများကြီးရှိပါသေးတယ်။

Layout Resources

Layout resource တွေကတော့ res > layout ထဲက xml file တွေဖြစ်ပြီး အထွေအထူးရှင်းပြစရာမလိုတော့ပါဘူး။ နောက်ပိုင်း layout တစ်ခုကို တစ်ခြား layout ထဲမှာ include နဲ့ထည့်သုံးပြီး အသုံးပြုပုံကိုရှင်းပြမှာဖြစ်ပါတယ်။

Menu Resources

res folder ထဲမှာ new > Android Resource Directory ဆိုပြီး menu လို့နာမည်ပေးပြီး folder အသစ်ဆောက်လိုက်ပါ။ menu folder ထဲမှာ new > menu resource file ဆိုပြီး main ဆိုတဲ့နာမည်နဲ့ xml တစ်ခုဆောက်လိုက်ပါ။ အောက်ကအတိုင်း ရေးလိုက်ပါ။

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/open" android:title="Open" />
    <item android:id="@+id/close" android:title="Close" />
    <item android:id="@+id/settings" android:title="Settings" />
    <item android:id="@+id/about" android:title="About" />
</menu>

MainActivity class ကိုပြန်ဖွင့်ပါ။ အပေါ်က code > override method (ctrl + o) ကနေ onCreateOptionsMenu ဆိုတဲ့ method ကို ထည့်လိုက်ပါ။ ပြီးရင် method ကို အောက်အတိုင်းပြင်လိုက်ပါ။

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }

onCreateOptionsMenu method ကတော့ အပေါ်က ActionBar (Toolbar) မှာ menu ထည့်တာပဲဖြစ်ပတါယ်။ getMenuInflater().inflate() ကိုအသုံးပြုပြီး main.xml ထဲက menu ကို ထည့်လိုက်တာပါ။ run ကြည့်ပါ။ အပေါ်က ActionBar မှာအောက်ကအတိုင်း menu တစ်ခုရတာတွေ့ရပါလိမ့်မယ်။

7_01

Menu Item တွေကို နှိပ်ရင် ဘာမှဖြစ်မှာမဟုတ်သေးပါဘူး။ နှိပ်ရင် ဘယ်လိုဖြစ်မယ်ဆိုတဲ့ Action ကို ထည့်ရအောင်။ Override Method ကနေ onOptionsItemSelected() ဆိုတဲ့ method ကိုထပ်ဆောက်ပါ။ MenuItem item ဆိုတဲ့ parameter တစ်ခုပါဝင်ပါတယ်။ menu ပေါ်ကနေ item တစ်ခုကိုနှိပ်လိုက်ရင် နှိပ်လိုက်တဲ့ item ကို parameter မှာပေးမှာပဲဖြစ်ပါတယ်။ ဒါကြောင့် ဘယ် item ကိုနှိပ်လိုက်လဲဆိုတာ switch ကိုအသုံးပြုပြီးဆုံးဖြတ်ပါမယ်။ method ထဲမှာအောက်ကအတိုင်းရေးလိုက်ပါ။

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.open:
                Toast.makeText(this, "Open", Toast.LENGTH_SHORT).show();
                break;
            case R.id.close:
                Toast.makeText(this, "Close", Toast.LENGTH_SHORT).show();
                break;
            case R.id.settings:
                Toast.makeText(this, "Settings", Toast.LENGTH_SHORT).show();
                break;
            case R.id.about:
                Toast.makeText(this, "About", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }

        return super.onOptionsItemSelected(item);
    }

Android Toast

ဒါကို run ကြည့်ပြီး item ကိုတစ်ခုကိုနှိပ်ကြည့်တဲ့အခါ Toast တစ်ခုထွက်လာပါလိမ့်မယ်။ Toast ဆိုတာကတော့ Android မှာအသုံးများပါတယ်။ user တွေကို message တစ်ခုပြလိုတဲ့အခါ အသုံးဝင်ပါတယ်။

Toast တစ်ခုပြဖို့ Toast.makeText() method ကိုအသုံးပြုပြီး ပထမ parameter ကတော့ context ကိုပေးရပါတယ်။ ဒုတိယ parameter ကတော့ Toast မှာပေါ်မဲ့ String ကိုပေးရပါတယ်။ တတိတစ်ခုကတော့ Toast ရဲ့ကြာချိန် ကိုရွေးရပါတယ်။ Toast.LENGTH_SHORT နဲ့ Toast.LENGTH_LONG ဆိုပြီး နှစ်မျိုးပေးနိုင်ပါတယ်။ နောက်ဆုံး Toast.show() method ကိုအသုံးပြုပြီး Toast ကိုပြလိုက်ပါတော့တယ်။

Menu Resource ကိုနောက်ထပ် Hamburger Menu လို့ခေါ်တဲ့ navigation drawer item တွေအတွက်လဲအသုံးပြုပါတယ်။

Animation Resource

Animation Resource ထဲမှာတော့ Android View တွေကို ဘယ်လို Animation တွေထည့်မလဲဆိုတာအတွက်အသုံးဝင်ပါတယ်။ res folder ထဲမှာ new > Android Resource Directory တစ်ခုဆောက်ပြီး anim ကိုရွေးပေးလိုက်ပါ။ anime ထဲမှာ new > Animation resource file ဆိုပြီး left_right လို့နာမည်ပေးပြီး xml တစ်ခုဆောက်ပါ။ အောက်က code တွေကူးထည့်လိုက်ပါ။

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate android:duration="3000" android:toXDelta="200%" />
</set>

layout ထဲက activity_second.xml ကိုဖွင့်ပါ။ HelloWorld TextView ကို hello လို့ id ပေးလိုက်ပါ။

<Button android:background="@drawable/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" />

SecondActivity Class ကိုဖွင့်ပါ။ onCreate() method ထဲမှာ အောက်ကအတိုင်းရေးလိုက်ပါ။

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        TextView tv = (TextView) findViewById(R.id.hello);
        Animation leftToRight = AnimationUtils.loadAnimation(this, R.anim.left_right);
        tv.setAnimation(leftToRight);
    }

TextView object တစ်ခုဖြစ်တဲ့ tv ထဲကို hello လို့ id ပေးထားတဲ့ TextView ထည့်လိုက်ပါတယ်။ AnimationUtils.loadAnimation() ဆိုတဲ့ method ကိုအသုံးပြုပြီး Animation Object တစ်ခုဖြစ်တဲ့ leftToRight ထဲကို R.anim.left_right animation ထည့်လိုက်ပါတယ်။ setAnimation() method ကိုအသုံးပြုပြီး parameter မှာ အရင်ဆောက်ခဲ့တဲ့ leftToRight ကိုထည့်လိုက်ပါတယ်။ Run ကြည့်ပါ။ Click Me ကိုနှိပ်ပြီး နောက် SecondActivity ကိုဖွင့်ပါ။ HelloWorld ဆိုတဲ့ TextView ဟာ ညာဖက်ကို ရွေ့သွားတာကိုတွေ့ရပါလိမ့်မယ်။ ပြီးတော့ သူ့အရင်နေရာကို သူပြန်ရောက်သွားပါလိမ့်မယ်။

left_right xml ကိုပြန်ကြည့်ရအောင် set ထဲမှာ translate ဆိုတာရှိပါတယ်။ set ထဲမှာ ဖြစ်ချင်တဲ့ Animation တွေကို တန်းစီပြီးရေးလို့ရပါတယ်။ ခုတော့ Animation တစ်ခုပဲပါဝင်ပါတယ်။ android:duration=“3000” ကတော့ Animation ဘယ်လောက်ကြာမလဲဆိုတာသတ်မှတ်တာပဲဖြစ်ပါတယ်။ milisecond နဲ့သတ်မှတ်တာဖြစ်လို့ 3000 ms ဆို ၃ စက္ကန့်ကြာမှာဖြစ်ပါတယ်။ android:toXDelta=“200%” ကတော့ လက်ရှိနေရာကနေ 200% ကွာတဲ့ x (horizontal) လိုင်းအတိုင်းသွားမှာဖြစ်ပါတယ်။ ဘယ်ဘက်ပြန်သွားချင်ရင် -200% နဲ့သုံးလို့ရပါတယ်။ 200% ကတော့ လက်ရှိ textview ရဲ့ x width ကိုတွက်တာပဲဖြစ်ပါတယ်။ translate animation အပြင် alpha, rotate, scale အစရှိတဲ့ Animation တွေရှိပါသေးတယ်။

Android Animation က တကယ် View တွေရွှေ့သွားတာမဟုတ်ပါဘူး။ animation ဆိုတဲ့အတိုင်းရွှေ့အောင် screen မှာ ဆွဲပေးလိုက်တာပဲ။ ဒါကြောင့် Animation ပြီးသွားတဲ့အခါ မူလနေရာကိုပြန်ရောက်သွားတာပဲဖြစ်ပါတယ်။

String Resources

res > values > strings.xml ကိုဖွင့်ပါ။ အောက်ကအတိုင်းဖြစ်အောင် ပြင်လိုက်ပါ။

<resources>
    <string name="app_name">Tutorial</string>
    <string name="hello">Hello World!</string>
</resources>

layout ထဲက activity_second.xml ကိုဖွင့်ပါ။ TextView ထဲက android:text=”Hello World!” ကို android:text=”@string/hello” လို့ပြင်လိုက်ပါ။ Run ပြီး Click Me ကိုနှိပ်ပါ။ Hello World! ပဲပေါ်မှာဖြစ်ပြီးဘာမှမပြောင်းပါဘူး။ ဒါပေမဲ့ String Resource ထဲက hello လို့ name ပေးထားတဲ့ Hello World! ကိုသွားဖတ်လိုက်တာပဲဖြစ်ပါတယ်။ ဘာလို့ String Resource ကိုသုံးသင့်လဲဆိုရင် String တိုင်းကို ထပ်ခါထပ်ခါရေးစရာမလိုတော့ပါဘူး။ String resource ထဲမှာ တစ်ခါရေးပြီး ခေါ်သုံးယုံပါပဲ။ နောက်တစ်ခုက localization ပါ။ User က device မှာပြင်သစ်စာရွေးထားတယ်ဆိုပါဆဆို့။ ကိုယ့် String Resource မှာ strings_fr.xml ဆိုပြီး ပြင်သစ်စာအတွက် သတ်သတ် String ရေးထားရင် ပြင်သစ်စာနဲ့ပေါ်မှာဖြစ်ပါတယ်။

strings.xml ကိုဖွင့်ပါ အပေါ်ဆုံးက open editor ကိုနှိပ်လိုက်ရင် string resource gui editor ပေါ်လာပါလိမ့်မယ်။ ကမ္ဘာလုံးပုံကိုနှိပ်ပါ။ French(fr) ကိုရွေးလိုက်ပါ။ Hello နဲ့တည့်တည့် row ထဲက French(fr) column မှာ Bonjour le monde တို့ထည့်လိုက်ပါ။ အောက်ကပုံအတိုင်းဖြစ်ရပါမယ်။

7_02

ဖုန်းမှာပဲဖြစ်ဖြစ် emulator မှာပဲဖြစ်ဖြစ် settings > language & input > language ထဲမှာ Français (France) ကိုရွေးပေးလိုက်ပါ။ Android Studio ကနေ App ကို Run ကြည့်ပါ။ Hello World လို့မပေါ်တော့ပဲ Bonjour le monde လို့ပေါ်နေပါလိမ့်မယ်။ English လိုပြန်ပြောင်းလိုက်ရင် Hello World လို့ပေါ်နေပါလိမ့်မယ်။ ဒီလောက်ဆို localization ဘယ်လိုလုပ်လဲဆိုတာသိပြီထင်ပါတယ်။

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>