Wednesday, October 4, 2017

Ứng dụng có nhiều tab

Bạn muốn màn hình ứng dụng có nhiều tab ở trên đầu, muốn xem bên nào chỉ cần chạm vào tab là ra bên đấy.

Ta sẽ tạo một class mẫu có 3 tab ở trên, tên là Phần 1, Phần 2, Phần 3. Trong mỗi tab sẽ có một dòng chữ và một nút bấm.
File xml như sau.
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

 <LinearLayout
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical" >

  <TabWidget
   android:id="@android:id/tabs"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content" />

   <FrameLayout
   android:id="@android:id/tabcontent"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent" >

   <LinearLayout
    android:id="@+id/l"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

 <TextView
 android:id="@+id/tv"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_gravity="center_horizontal"
 android:layout_marginTop="5dp"
 android:text="Đây là dòng chữ ở tab1"
 android:textColor="#800000"
 android:textSize="20sp" />

 <Button
  android:id="@+id/bu1"
  android:layout_width="80dp"
 android:layout_height="40dp"
  android:layout_gravity="center_horizontal"
  android:layout_marginBottom="5dp"
android:background="@drawable/back2"
 android:text="Nút 1"
  android:textColor="#0000cd"
  android:textSize="3mm" />
  </LinearLayout>

  <LinearLayout
   android:id="@+id/l2"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

   <TextView
    android:id="@+id/tv2"
   android:layout_width="wrap_content"
 android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal"
  android:layout_marginTop="5dp"
   android:text="Đây là dòng chữ tab2"
   android:textColor="#800000"
   android:textSize="20sp" />

<Button
 android:id="@+id/bu2"
android:layout_width="80dp"
 android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="5dp"
 android:background="@drawable/back2"
   android:text="Nút 2"
  android:textColor="#0000cd"
  android:textSize="3mm" />
 </LinearLayout>

 <LinearLayout
  android:id="@+id/l3"
 android:layout_width="fill_parent"
  android:layout_height="fill_parent"
 android:orientation="vertical" >
<TextView
  android:id="@+id/tv3"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal"
  android:layout_marginTop="5dp"
 android:text="Đây là dòng chữ tab3"
  android:textColor="#800000"
 android:textSize="20sp" />

<Button
android:id="@+id/bu3"
android:layout_width="80dp"
 android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="5dp"
android:background="@drawable/back2"
 android:text="Nút 3"
 android:textColor="#0000cd"
 android:textSize="3mm" />
 </LinearLayout>
</FrameLayout>
 </LinearLayout>

</TabHost>
Trong class ta copy đoạn sau xuống dưới setContentView
TabHost tabs=(TabHost)findViewById(R.id.tabhost);         
         tabs.setup();
         
       TabHost.TabSpec spec=tabs.newTabSpec("tag1");           
       spec.setContent(R.id.l);    
       spec.setIndicator("Phần 1");
       tabs.addTab(spec);
         
       spec=tabs.newTabSpec("tag2");
       spec.setContent(R.id.l2);   
       spec.setIndicator("Phần 2");
       tabs.addTab(spec);
       spec=tabs.newTabSpec("tag3");
       spec.setContent(R.id.l3);   
       spec.setIndicator("Phần 3");
       tabs.addTab(spec);
Đó là ta khai báo, tham chiếu địa chỉ, đặt tên cho từng tab một.
Tiếp theo ta tham chiếu các nút bấm, chữ, set lệnh như bình thường.
tv = (TextView)findViewById(R.id.tv);
tv2 = (TextView)findViewById(R.id.tv2);
tv3 = (TextView)findViewById(R.id.tv3);
b1 = (Button) findViewById(R.id.bu1);
b2 = (Button) findViewById(R.id.bu2);
b3 = (Button) findViewById(R.id.bu3);
b1.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
     tv.setText("Nút đã hoạt động");              
             }
          });     
b2.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
     tv2.setText("Nút đã hoạt động bên tab2");                   
            }
          });
b3.setOnClickListener(new View.OnClickListener() {
     @Override
public void onClick(View v) {
     tv3.setText("Nút đã hoạt động bên tab3");                   
             }
          });
Chạy thử và ấn các nút để thấy chúng hoạt động.
Làm class nhiều tab có lợi là ta chỉ phải dùng một class cho tất cả các phần, xử lý trong một file thôi, không phải tạo, khai báo nhiều class.



No comments:

Post a Comment