www.itsci.mju.ac.th/sayan
6 WHY DYNAMIC UI ** app - - PowerPoint PPT Presentation
6 WHY DYNAMIC UI ** app - - PowerPoint PPT Presentation
www.itsci.mju.ac.th/sayan DYNAMIC USER INTERFACE SAYAN UNANKARD 6 WHY DYNAMIC UI ** app * User interface Dynamic *
WHY DYNAMIC UI
- ในกรณีที่ต*องการให* app สามารถที่จะสร*าง User interface แบบ Dynamic ได* จำเปJนต*อง
ใช*ชุดคำสั่งภาษาจาวา ในการสร*าง
- ในแตRละ UI widget ใน xml จะมีคลาสที่สอดคล*องในภาษาจาวา โดยสามารถสร*าง UI
widget ได*ดังนี้ WidgetType name = new WidgetType(this); เชRน TextView txtname = new TextView(this);
2
การเพิ่ม UI เข<าไปใน LAYOUT
ในการเพิ่ม UI เข*าไปบนหน*าจอ app จะสามารถเพิ่มเข*าไปผRาน onscreen container (ViewGroup) เชRน layout
- จำเปJนต*องกำหนด id ให*กับ ViewGroup ในไฟลn .xml
- เพิ่ม widget ลงไปใน container ด*วยเมธอด AddView()
3
LinearLayout r = (LinearLayout) findViewById(R.id.mainlayout); for (int i = 0; i< 5; i++) { EditText t1 = new EditText(this); t1.setText("test " + i); r.addView(t1); } <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/mainlayout" android:orientation="vertical"> </LinearLayout>
VIEWGROUP METHOD
addView(view) addView(view, index) addView(view, params) เพิ่ม view ลงไปใน layout bringChildToFront(view) ย*าย view ไปที่ตำแหนRงบนสุด getChildAt(index) คืนคRา view ณ ตำแหนRง index ที่ระบุ getChildCount() คืนคRาจำนวน child views removeAllViews() ลบ views ทั้งหมด removeView(view) ลบ view ที่ระบุ removeViewAt(index) ลบ view ณ ตำแหนRง index ที่ระบุ
4
การอGานคGาจาก DYNAMIC UI
กรณีที่ต*องการอRานคRาจาก Dynamic UI ที่สร*างขึ้น เชRน ต*องการอRานคRาจาก EditText ที่วน loop สร*างขึ้นนั้น จะใช*คำสั่งดังนี้ r.getChildCount() ใช*สำหรับนับจำนวน EditText ที่ถูกสร*างขึ้น r.getChildAt(i) ใช*สำหรับ get คRา EditText ที่ตำแหนRงที่ i
5
public void onBtnOkClick(View view) { LinearLayout r = (LinearLayout) findViewById(R.id.mainlayout); for (int i = 0; i< r.getChildCount(); i++){ EditText t = (EditText) r.getChildAt(i); Toast.makeText(Main2Activity.this, "t" + i + " = " + t.getText().toString(), Toast.LENGTH_SHORT).show(); } }
LAYOUT INFLATER
Layout inflater เปJนการแปลง layout.xml ให*เปJน Java widget object
6
Layout.xml Layout inflater Java widget objects
<LinearLayout <ImageView ... /> <TextView ... /> </LinearLayout>
ตัวอยGางการสร<าง LAYOUT TEMPLATE
7
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/img_sweet" android:layout_gravity="center_horizontal" android:src="@drawable/chocolate_cake" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="chocolate cake" android:id="@+id/txt_name" android:layout_gravity="center_horizontal" android:textSize="16dp" /> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/chb_sweet" android:layout_gravity="center_horizontal" /> </LinearLayout>
sweets_layout.xml
ตัวอยGาง DYNAMIC LAYOUT
ในหน*า MainActivity กำหนดเฉพาะ GroupView ที่ต*องการให* Layout template ที่สร*างไว* แสดงผล เชRน GridLayout
8
<?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.example.sayan.lec6.MainActivity"> <GridLayout android:columnCount="1" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/mainlayout"> </GridLayout> </RelativeLayout>
สร*าง layout ที่ต*องการ สร*างให*เปJน template
ตัวอยGาง DYNAMIC LAYOUT
9
private static int[] sweets = {R.drawable.chocolate_cake, R.drawable.cream_cake, R.drawable.muffin, R.drawable.tart, R.drawable.tartlet }; GridLayout r = (GridLayout) findViewById(R.id.mainlayout); for (int i = 0; i< sweets.length; i++) { View sweet = getLayoutInflater().inflate( R.layout.sweets_layout,null); ImageView img = (ImageView) sweet.findViewById(R.id.img_sweet); img.setImageResource(sweets[i]); TextView txt = (TextView) sweet.findViewById(R.id.txt_name); txt.setText(sweets[i]); String str = txt.getText().toString(); txt.setText(str.substring(str.lastIndexOf("/")+1,str.indexOf("."))); r.addView(sweet); }
กำหนด layout ที่ต*องการ สร*างเปJน template เปลี่ยนรูปภาพตาม array เปลี่ยนข*อความใต*ภาพให* เปJนชื่อไฟลn เพิ่ม template ลงไปใน layout
ตัวอยGาง DYNAMIC LAYOUT
กรณีที่ข*อมูลที่ต*องการนำเสนอ ไมRสามารถแสดงได*ในหน*าจอเดียว สามารถใช* ScrollView ชRวยใน การเลื่อนหน*าจอได*ดังนี้
10
<ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/scrollView" android:fillViewport="false" android:orientation="vertical" android:padding="10dp"> <GridLayout android:columnCount="3" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/mainlayout"> </GridLayout> </ScrollView>
การอGานคGาจาก DYNAMIC UI จาก TEMPLATE
กรณีที่สร*างเปJน Template สามารถ get คRาของข*อมูลที่ผู*ใช*กรอกเข*ามาได* ดังนี้
11
public void onBtnOkClick(View view) { GridLayout r = (GridLayout) findViewById(R.id.mainlayout); for (int i = 0; i< r.getChildCount(); i++){ View sweet = (View) r.getChildAt(i); CheckBox chb = (CheckBox) sweet.findViewById(R.id.chb_sweet); Toast.makeText(MainActivity.this, "t" + i + " = " + chb.isChecked(), Toast.LENGTH_SHORT).show(); } }