• Android TabHost


    Tab标签页是界面设计时经常使用的界面控件,可以实现多个分页之间的快速切换,每个分页可以显示不同的内容
    Tab标签页的使用
          1.首先要设计所有的分页的界面布局
          2.在分页设计完成后,使用代码建立Tab标签页,并给每个分页添加标识和标题
          3.最后确定每个分页所显示的界面布局
          每个分页建立一个XML文件,用以编辑和保存分页的界面布局,使用的方法与设计普通用户界面没有什么区别

    使用Tab标签页的一般步骤
    首先要设计所有的分页的界面布局
    Activity继承TabActivity
    调用TabActivity的getTabHost()方法获得TabHost对象
    通过TabHost创建Tab

     

    所谓的tabhost提供选项卡(Tab页)的窗口视图容器.此对象包含两个子对象: 一个是使用户可以选择指定标签页的标签的集合;另一个是用于显示标签页内容的 FrameLayout. 选项卡中的个别元素一般通过其容器对象来控制,而不是直接设置子元素本身的值.

    先演示一个简单的例子,只有一个Activity,但要注意的是继承tabActivity这个类

    第一步:在布局文件中main.xml敲入代码。注意这里用了FrameLayout,主要特点是可以覆盖其他内容,只显示当前的

    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
     2 
     3 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     4     android:id="@+id/FrameLayout01" 
     5     android:layout_width="wrap_content" 
     6     android:layout_height="wrap_content">
     7     
     8     <TextView 
     9     android:id="@+id/TextView01" 
    10     android:layout_width="wrap_content" 
    11     android:layout_height="wrap_content" 
    12     android:text="所有通话记录"></TextView>
    13     
    14     <TextView 
    15     android:id="@+id/TextView02" 
    16     android:layout_width="wrap_content" 
    17     android:layout_height="wrap_content" 
    18     android:text="已接来电"></TextView>
    19     
    20     <TextView 
    21     android:id="@+id/TextView03" 
    22     android:layout_width="wrap_content" 
    23     android:layout_height="wrap_content" 
    24     android:text="未接来电"></TextView>
    25     
    26 </FrameLayout>

    第二步:编写layouttab01Activity.java这个文件,比较简单。

    View Code
     1 package cn.edu.zwu.tel;
     2 
     3 import android.app.TabActivity;
     4 import android.os.Bundle;
     5 import android.view.LayoutInflater;
     6 import android.widget.TabHost;
     7 import android.widget.Toast;
     8 import android.widget.TabHost.OnTabChangeListener;
     9 
    10 
    11 public class LayoutTab01Activity extends TabActivity {
    12     @Override
    13     public void onCreate(Bundle savedInstanceState) {
    14         super.onCreate(savedInstanceState);
    15         
    16         TabHost th = getTabHost();
    17         //声明TabHost,然后用LayoutInflater过滤出布局来,给TabHost加上含有Tab页面的FrameLayout
    18 //from(this)从这个TabActivity获取LayoutInflater  
    19 //R.layout.main 存放Tab布局
    20 //通过TabHost获得存放Tab标签页内容的FrameLayout  
    21 //是否将inflate 拴系到根布局元素上
    22         LayoutInflater.from(this).inflate(R.layout.main, th.getTabContentView(), true); 
    23         //通过TabHost获得存放Tab标签页内容的FrameLayout,
    24 //newTabSpecd的作用是获取一个新的 TabHost.TabSpec,并关联到当前 TabHost
    25 //setIndicator的作用是指定标签和图标作为选项卡的指示符.
    26 //setContent的作用是指定用于显示选项卡内容的视图 ID.
    27         th.addTab(th.newTabSpec("all").setIndicator("所有通话记录", getResources().getDrawable(R.drawable.call_forward)).setContent(R.id.TextView01));
    28         th.addTab(th.newTabSpec("ok").setIndicator("已接来电",getResources().getDrawable(R.drawable.phone_call)).setContent(R.id.TextView02));
    29         th.addTab(th.newTabSpec("cancel").setIndicator("未接来电",getResources().getDrawable(R.drawable.call_bluetooth)).setContent(R.id.TextView03));
    30         //setOnTabChangeListener的作业是注册一个回调函数,当任何一个选项卡的选中状态发生改变时调用.  
    31         th.setOnTabChangedListener(
    32                 new OnTabChangeListener() {
    33                     @Override
    34                     public void onTabChanged(String tabId) {
    35                         Toast.makeText(LayoutTab01Activity.this, tabId, Toast.LENGTH_LONG).show();
    36                     }
    37                 }
    38             );       
    39     }
    40 }

     

    演示效果图:

     

    第二种方法:没有用到FrameLayout这个布局,而直接用了listview,创建选项卡内容的回调函数creatTabContent()实现的

    第一步:编写main.xml文件,具体代码如下

    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="fill_parent"
     4     android:layout_height="fill_parent"
     5     android:orientation="vertical" >
     6 
     7     <TextView
     8         android:layout_width="fill_parent"
     9         android:layout_height="wrap_content"
    10         android:text="@string/hello" />
    11 
    12 </LinearLayout>

    第二步;编写layoutTabActivity.java文件,具体解释都注释在代码里

    View Code
     1 package cn.edu.zwu.tel;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import android.app.TabActivity;
     6 import android.os.Bundle;
     7 import android.view.View;
     8 import android.widget.ArrayAdapter;
     9 import android.widget.ListView;
    10 import android.widget.TabHost;
    11 
    12 //TabContentFactory的意思是当某一选项卡被选中时生成选项卡的内容.
    13 //如果你的选项卡的内容按某些条件来生成, 请使用该接口.例如:不显示既存的视图而是启动活动.
    14 public class LayoutTab02Activity extends TabActivity implements TabHost.TabContentFactory  {
    15 
    16 @Override
    17   public void onCreate(Bundle savedInstanceState) 
    18   {
    19         super.onCreate(savedInstanceState);
    20         TabHost th = getTabHost();
    21          //newTabSpecd的作用是获取一个新的 TabHost.TabSpec,并关联到当前 TabHost
    22 //setIndicator的作用是指定标签和图标作为选项卡的指示符.
    23 //setContent的作用是指定用于显示选项卡内容的视图 ID.
    24         th.addTab(th.newTabSpec("all").setIndicator("所有通话记录").setContent(this));
    25         th.addTab(th.newTabSpec("ok").setIndicator("已接来电").setContent(this));
    26         th.addTab(th.newTabSpec("cancel").setIndicator("未接来电").setContent(this));
    27     }
    28 //创建选项卡内容的回调函数.        
    29   public View createTabContent(String tag) 
    30   {
    31         ListView lv = new ListView(this);
    32         List<String> list = new ArrayList<String>();
    33         list.add(tag);
    34         if(tag.equals("all"))
    35         {
    36             list.add("tom");
    37             list.add("kite");
    38             list.add("rose");
    39         }else if(tag.equals("ok"))
    40         {
    41             list.add("tom");
    42             list.add("kite");
    43         }else
    44         {
    45             list.add("rose");
    46         }
    47         
    48         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    49                 android.R.layout.simple_list_item_checked, list);
    50         lv.setAdapter(adapter);
    51         return lv;
    52     }
    53   }

    效果图:

  • 相关阅读:
    离线数仓 建模、表的类型分类
    获取每个部门中当前员工薪水最高的相关信息
    dwd层 维度退化 的作用
    单例模式懒汉式
    反汇编命令使用
    RabbitMQ实战高级特性
    初步理解MySQL的gap锁
    【java并发系列】Controller是线程安全吗_ 安全方式如何
    mysql_14_count(*)为什么这么慢
    MySQL 通过Docker搭建主从同步
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469838.html
Copyright © 2020-2023  润新知