TabHost详解

来源:互联网 发布:原生js 实现swipe效果 编辑:程序博客网 时间:2024/06/04 23:21

正文

TabHost的实现分为两种,一个是不继承TabActivity,一个是继承自TabActivity;当然了选用继承自TabActivity的话就相对容易一些,下面来看看分别是怎样来实现的吧。

方法一、定义tabhost:不用继承TabActivity

 1、布局文件:activity_main.xml

<LinearLayout 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:orientation="vertical"      tools:context=".MainActivity" >      <Button          android:id="@+id/button1"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:text="Button" />       <TabHost          android:id="@+id/tabhost"          android:layout_width="match_parent"          android:layout_height="wrap_content">            <LinearLayout              android:layout_width="match_parent"              android:layout_height="match_parent"              android:orientation="vertical" >                <TabWidget                  android:id="@android:id/tabs"                  android:layout_width="match_parent"                  android:layout_height="wrap_content" >              </TabWidget>                <FrameLayout                  android:id="@android:id/tabcontent"                  android:layout_width="match_parent"                  android:layout_height="match_parent" >                    <!-- 第一个tab的布局 -->                  <LinearLayout                      android:id="@+id/tab1"                      android:layout_width="match_parent"                      android:layout_height="match_parent" >                        <TextView                          android:id="@+id/textView1"                          android:layout_width="wrap_content"                          android:layout_height="wrap_content"                          android:text="林炳东" />                    </LinearLayout>                    <!-- 第二个tab的布局 -->                  <LinearLayout                      android:id="@+id/tab2"                      android:layout_width="match_parent"                      android:layout_height="match_parent" >                        <TextView                          android:id="@+id/textView2"                          android:layout_width="wrap_content"                          android:layout_height="wrap_content"                          android:text="张小媛" />                    </LinearLayout>                    <!-- 第三个tab的布局 -->                  <LinearLayout                      android:id="@+id/tab3"                      android:layout_width="match_parent"                      android:layout_height="match_parent" >                        <TextView                          android:id="@+id/textView3"                          android:layout_width="wrap_content"                          android:layout_height="wrap_content"                          android:text="马贝贝" />                    </LinearLayout>              </FrameLayout>          </LinearLayout>      </TabHost>         </LinearLayout>  
2、JAVA代码
  1. public class MainActivity extends Activity {  
  2.   
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.activity_main);  
  7.           
  8.         TabHost th=(TabHost)findViewById(R.id.tabhost);  
  9.         th.setup();            //初始化TabHost容器  
  10.           
  11.         //在TabHost创建标签,然后设置:标题/图标/标签页布局  
  12.         th.addTab(th.newTabSpec("tab1").setIndicator("标签1",getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.tab1));  
  13.         th.addTab(th.newTabSpec("tab2").setIndicator("标签2",null).setContent(R.id.tab2));  
  14.         th.addTab(th.newTabSpec("tab3").setIndicator("标签3",null).setContent(R.id.tab3));      
  15.   
  16.        //上面的null可以为getResources().getDrawable(R.drawable.图片名)设置图标   
  17.   
  18.     }  
  19. }  
源码地址http://pan.baidu.com/s/1bpmdVd1

方法二:Tab的内容分开:不用继承TabActivity

 1、第一个tab的XML布局文件,tab1.xml:

<?xml version="1.0" encoding="UTF-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"         android:id="@+id/LinearLayout01"          android:layout_width="wrap_content"         android:layout_height="wrap_content">         <TextView               android:text="我是标签1的内容喔"              android:id="@+id/TextView01"               android:layout_width="wrap_content"              android:layout_height="wrap_content">         </TextView>   </LinearLayout>  

2、第二个tab的XML布局文件,tab2.xml: 

<?xml version="1.0" encoding="UTF-8"?>  <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"          android:id="@+id/LinearLayout02"          android:layout_width="wrap_content"          android:layout_height="wrap_content">            <TextView android:text="标签2"                    android:id="@+id/TextView01"                     android:layout_width="wrap_content"                    android:layout_height="wrap_content" />  </LinearLayout>  

3、主布局文件,activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:orientation="vertical" >        <TabHost          android:id="@+id/tabhost"                   android:layout_width="match_parent"          android:layout_height="match_parent" >            <LinearLayout              android:layout_width="match_parent"              android:layout_height="match_parent"              android:orientation="vertical" >                <TabWidget                  android:id="@android:id/tabs"                  android:layout_width="match_parent"                  android:layout_height="wrap_content" >              </TabWidget>                <FrameLayout                  android:id="@android:id/tabcontent"                  android:layout_width="match_parent"                  android:layout_height="match_parent" >                                </FrameLayout>          </LinearLayout>      </TabHost>    </LinearLayout> 

4、JAVA代码:

public class MainActivity extends Activity {        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);                    TabHost m = (TabHost)findViewById(R.id.tabhost);          m.setup();                    LayoutInflater i=LayoutInflater.from(this);          i.inflate(R.layout.tab1, m.getTabContentView());          i.inflate(R.layout.tab2, m.getTabContentView());//动态载入XML,而不需要Activity                    m.addTab(m.newTabSpec("tab1").setIndicator("标签1").setContent(R.id.LinearLayout01));                m.addTab(m.newTabSpec("tab2").setIndicator("标签2").setContent(R.id.LinearLayout02));         }  }  


源码地址http://pan.baidu.com/s/1ge5YtyV

 方法三:继承自TabActivity

1、主布局文件,activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="fill_parent">        <!-- 第一个布局 -->      <LinearLayout             android:id="@+id/view1"          android:layout_width="match_parent"          android:layout_height="match_parent" >                <TextView              android:id="@+id/textView1"              android:layout_width="wrap_content"              android:layout_height="wrap_content"              android:text="张小媛" />      </LinearLayout>        <!-- 第二个布局 -->      <LinearLayout             android:id="@+id/view2"          android:layout_width="match_parent"          android:layout_height="match_parent" >                    <TextView              android:id="@+id/textView2"              android:layout_width="wrap_content"              android:layout_height="wrap_content"              android:text="马贝贝" />      </LinearLayout>        <!-- 第三个布局 -->      <TextView android:id="@+id/view3"           android:background="#00ff00"          android:layout_width="fill_parent"          android:layout_height="fill_parent"          android:text="Tab3"/>    </FrameLayout> 

2、JAVA代码: 

 先将派生自Activity改为TabActivity,然后代码如下:

public class MainActivity extends TabActivity {        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setTitle("TabDemoActivity");          TabHost tabHost = getTabHost();          LayoutInflater.from(this).inflate(R.layout.activity_main,                  tabHost.getTabContentView(), true);          tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("tab1", getResources().getDrawable(R.drawable.ic_launcher))                  .setContent(R.id.view1));          tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab2")                  .setContent(R.id.view2));          tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab3")                  .setContent(R.id.view3));                               //标签切换事件处理,setOnTabChangedListener          tabHost.setOnTabChangedListener(new OnTabChangeListener(){                @Override              public void onTabChanged(String tabId) {                  if (tabId.equals("tab1")) {   //第一个标签                  }                  if (tabId.equals("tab2")) {   //第二个标签                  }                  if (tabId.equals("tab3")) {   //第三个标签                  }              }                      });                           }    }  

源码地址:http://pan.baidu.com/s/1boJDFjD
 四:实现微信底部导航栏



实现微信底部导航栏源码地址:http://pan.baidu.com/s/1hsJJGnq




1 0
原创粉丝点击