วันนี้จะพูดเรื่องของ RelativeLayout และ LinearLayout เบื้องต้นกันครั้บ โดยทั้งสองตัวข้างต้นเป็นประเภท viewGroup ก็คือสามารถมี view อยู่ภายในได้ ยกตัวอย่างเช่น
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Name : "
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions"
android:hint="TYPE YOU NAME"
/>
</LinearLayout>
หน้าตาก็จะประมาณนี้สังเกตว่าใน LinearLayout จะมี TextView และ EditText อยู่ภายใน ทีนี้แล้ว RelativeLayout กับ LinearLayout มันต่างกันยังไง? ในส่วนของ LinearLayout นั้นผมมองเหมือนกับการวางกล่องสี่เหลี่ยมวางไปเรื่อยขึ้นอยู่กับว่าเราจะกำหนดให้เรียงต่อไปด้าน horizontal หรือ vertical โดย LinearLayout จะมี attribute ชื่อ orientation ให้เราสามารถกำหนดแนวในการวางได้ โดยใน LinearLayout นั้นก็สามารถวาง LinearLayout ซ้อนลงไปได้
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1"
android:background="#FF0000"
/>
<TextView
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1"
android:background="#00FF00"
/>
<TextView
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1"
android:background="#0000ff"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_weight="1"
android:background="#00FF00"
/>
<TextView
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_weight="1"
android:background="#0000ff"
/>
<TextView
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_weight="1"
android:background="#FF0000"
/>
<TextView
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_weight="1"
android:background="#00FF00"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="80dp"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#000000"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#ffffff"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#000000"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
หน้าตาก็จะออกมาประมาณนี้แหละครับ อาจดูไม่ค่อยสวยเท่าไหร่นะครับ พอดีไม่ค่อยมีศิลป์ 555..ใน xml ด้านบนจะเป็นการใช้ LinearLayout ซ้อนๆกันโดยชั้นในสุดก็จะมี TextView แสดงสีออกมา LinearLayout ที่กำหนด orientation เป็น horizontal ก็จะมีการเรียง view ภายในเป็นแนวนอนไปจนสุด แต่ถ้าเป็น vertical ก็จะเรียงแนวตั้ง มีการใช้ layout_weight โดย attribute นี้สามารถใช้ได้ใน LinearLayout เท่านั้น โดยจะเป็นการให้น้ำหนักแต่ละ view ยกตัวอย่างง่ายๆ มี TextView อยู่ 2 ตัว กำหนด layout_weight ให้ตัวละ 1 ทั้งสอง view ก็จะมีเนื้อที่เท่ากัน แต่ถ้ากำหนด ให้อันหนึ่งเป็น 2 ก็จะแบ่งหน้าจอออกเป็น 3 ส่วน โดย view ที่กำหนดเป็น 2 ก็จะได้ไป 2 ส่วน อีก view ก็ได้ไปหนึ่งส่วน โดย layout_weight สามารถใช้ได้ทั้ง width และ height โดยกำหนดค่าเป็น 0dp แล้วใส่ layout_weight
ข้อที่ต้องระวังในการใช้ layout_weight คือไม่ควรใช้ layout_weight ซ้อนกันหลายๆชัั้น เพราะจะมีปัญหาเรื่องประสิทธิภาพ
ส่วน RelativeLayout ขอยกไปอีกบทความแล้วกันครับ ง่วงนอนเริ่มพิมพ์ผิดๆถูกๆแล้ว

