Thursday, August 1, 2013

ScrollView and HorizontalScrollView

Credit to: http://computerandmobiletech.com
Stretching the Screen
Application တစ္ခုမွာ ကိုယ္ထည့္ခ်င္တဲ့ control ေတြမ်ားေနတဲ့အတြက္ Screen တစ္ခုထဲနဲ႕မလံုေလာက္ေတာ့ဘူးဆိုရင္ multiple screen ေတြကိုသံုးရပါေတာ့မယ္။ လုပ္ႏုိင္တဲ့ နည္းလမ္းေတြကေတာ့အမ်ားၾကီးရွိပါတယ္။  အလြယ္ဆံုးနည္းကေတာ့ ၾကိဳက္သေလာက္ control ေတြထည့္ပါ။ screen ကေဖာ္ျပေပးႏုိင္တာထက္မ်ားေနရင္ scroll လုပ္ျပီးၾကည့္တဲ့နည္းပါ။ ဒီနည္းအတြက္ ScrollView နဲ႕ HorizontalSchroolView ဆိုတဲ့ class ၂ခုကိုအသံုးျပဳရပါမယ္။ ဒီနည္းအတြက္အရင္ဆံုး main.xml file မွာေအာက္ပါအတုိင္း code ေတြေရးပါမယ္။

<?xml version=”1.0″ encoding=”utf-8″?>
<ScrollView      xmlns:android=”http://schemas.android.com/apk/res/android”

android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
>

<LinearLayout
android:orientation=”vertical”       android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:id=”@+id/L1″
>

<TextView
android:layout_width=”fill_parent”          android:layout_height=”wrap_content”             android:text=”@string/hello”
/>

</LinearLayout>

</ScrollView>

ScrollView  ဟာ outermost layout ျဖစ္တဲ့ LinearLayout ကုိ encapsulate လုပ္ထားပါတယ္။ ScrollView ဟာ screen ကုိ ေဒါင္လိုက္ခ်ဲ႕ေပးပါတယ္။ ဒါေၾကာင့္ LinearLayout ရဲ႕ orientation attribute ကုိ vertical ထားေပးရပါမယ္။ ေအာက္္မွာ main activity အတြက္ ScrollViewsActivity class ကိုေဖာ္ျပထားပါတယ္။

package com.sheusi.ScrollViews;

import android.app.Activity;
import android.os.Bundle; import android.widget.*;
import android.content.Context;
import android.graphics.Color;

public class ScrollViewsActivity extends Activity {
/** Called when the activity is first created. */
TextView[] tvarray=new TextView[30];
LinearLayout myLayout=null;
Context myContext=null;

@Override
public void onCreate(Bundle savedInstanceState) {                                                                 super.onCreate(savedInstanceState);
setContentView(R.layout.main);                                                                                               myContext=this.getApplicationContext();                                                                           myLayout=(LinearLayout)findViewById(R.id.L1);
for(int ct=0;ct<=29;++ct){
int colormult;
tvarray[ct]=new TextView(myContext);
tvarray[ct].setText(“TextView number”+                                                                                           String.valueOf(ct));
colormult=ct*8;
tvarray[ct].setBackgroundColor(Color.rgb                                                                                  (colormult,colormult, colormult));
tvarray[ct].setTextSize(30);
myLayout.addView(tvarray[ct]);
}
}
}

ဒီ code ေတြက screen ေပၚမွာ TextViews အခု ၃၀ create လုပ္ေပးမွာပါ။ TextViews တစ္ခုစီကို အေရာင္တစ္မ်ိဳးစီနဲ႕ျမင္ရမွာပါ။ screen ေပၚမွာ TextView အခု ၃၀ မဆန္႕ပါဘူး။ ဒါေၾကာင့္ TextView တစ္ခုခ်င္းစီကိုၾကည့္ဘို႕ဆိုရင္ scroll လုပ္ျပီးၾကည့္ရပါမယ္။
ဒီ class ထဲမွာ TextViews array တစ္ခုကို declare လုပ္ထားပါတယ္။ ျပီးေတာ့ looping statement ကုိသံုးထားပါတယ္။ loop ထဲမွာ TextView တစ္ခုစီကုိ instantiate လုပ္ျပီး shade of gray ေတြသတ္မွတ္ေပးထားပါတယ္။ TextView အခု ၃၀ ဆိုေတာ့ shade of gray ၃၀ သံုးထားပါတယ္။ ျပီးေတာ့ TextView တစ္ခုစီကို text ေတြေပးထားပါေသးတယ္။ (ဥပမာ TextView number 0 … TextView number 29)
Array index က 0 ကစပါတယ္။ ဒါေၾကာင့္ 0 to 29 ျဖစ္ေနတာပါ။ ဒီေနရာမွာသတိျပဳရမွာက TextView ေတြကို LinearLayout ထဲကိုထည့္တာပါ။ ScrollView ထဲထည့္တာမဟုတ္ဘူးဆိုတာသိထားဘုိ႕ပါ။ Run ၾကည့္ရင္ ေအာက္ပါ Figure မွာျပထားတဲ့အတုိင္းျမင္ရပါမယ္။
1
ဒီတစ္ခါ HorizontalScrollView အေၾကာင္းေျပာပါမယ္။ HorizontalScrollView အတြက္ဆိုရင္ main.xml ဖုိင္မွာ ScrollView tag အစား HorizontalScrollView လုိ႕ေျပာင္းပါ။ LinearLayout ရဲ႕ orientation ကုိ horizontal လုိ႕ေျပာင္းပါ။ ေအာက္ပါအတုိင္းပါ။

<?xml version=”1.0″ encoding=”utf-8″?>
<ScrollView      xmlns:android=”http://schemas.android.com/apk/res/android”

android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
>

<LinearLayout
android:orientation=”vertical”       android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:id=”@+id/L1″
>

<TextView
android:layout_width=”fill_parent”          android:layout_height=”wrap_content”             android:text=”@string/hello”
/>

</LinearLayout>

</ScrollView>

Java code မွာေတာ့ TextView array ရဲ႕ size ကုိ 30 အစား 8 လုိ႕ေျပာင္းပါ။ TextView ၈ခုဘဲသံးပါေတာ့မယ္။ loop အတြင္းမွာေအာက္ပါအတုိင္းေျပာင္းေပးပါ။

for(int ct=0;ct<=7;++ct){
int colormult;
tvarray[ct]=new TextView(myContext);
tvarray[ct].setText(“   TextView number “+String.valueOf(ct));
colormult=ct*30;
tvarray[ct].setBackgroundColor(Color.rgb(colormult, colormult, colormult));
tvarray[ct].setTextSize(30);
myLayout.addView(tvarray[ct]);
}
Loop size ကုိလည္း 0 to 29 အစား 0 to 7 လုိ႕ေျပာင္းထားပါတယ္။ TextView က ၈ခုဘဲရွိေတာ့လို႕ပါ။ shade of gray အတြက္သတ္မွတ္ထားတဲ့ multiplier ကုိေတာ့ 8 ကေန 30 ကိုေျပာင္းလုိက္ပါတယ္။ (မိမိႏွစ္သက္သလိုေျပာင္းႏုိင္ပါတယ္) ဒါေပမယ့္ color value ဟာ 255 ထက္ေက်ာ္လို႕မရပါဘူး။ ဒါေၾကာင့္ multiplier ကုိ 36 ထက္ေက်ာ္လို႕မရပါဘူး။ 7 x 37 = 259 ဆိုရင္ မရေတာ့ပါဘူး။
HorizontalScrollView အတြက္ run ရင္ေအာက္ပါပံုအတုိင္း ျမင္ရပါမယ္။





2

No comments:

Post a Comment