TabHost详解

来源:互联网 发布:淘宝加钱换购怎么设置 编辑:程序博客网 时间:2024/06/06 18:02

前言:今天仔细研究了下TabHost,主要是为了实现微信底部导航栏的功能,最后也给出一个链接,这位老兄用TabHost基本做出来了微信导航栏。

正文

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代码

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TabHost th=(TabHost)findViewById(R.id.tabhost);th.setup();            //初始化TabHost容器//在TabHost创建标签,然后设置:标题/图标/标签页布局th.addTab(th.newTabSpec("tab1").setIndicator("标签1",getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.tab1));th.addTab(th.newTabSpec("tab2").setIndicator("标签2",null).setContent(R.id.tab2));th.addTab(th.newTabSpec("tab3").setIndicator("标签3",null).setContent(R.id.tab3));       //上面的null可以为getResources().getDrawable(R.drawable.图片名)设置图标 }}

效果图:

此例源码地址:http://download.csdn.net/detail/harvic880925/6657611  (不要分,欢迎下载)

 方法二: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 {@Overrideprotected 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,而不需要Activitym.addTab(m.newTabSpec("tab1").setIndicator("标签1").setContent(R.id.LinearLayout01));          m.addTab(m.newTabSpec("tab2").setIndicator("标签2").setContent(R.id.LinearLayout02)); }}

效果图:

此例源码地址:http://download.csdn.net/detail/harvic880925/6657679   (不要分,欢迎下载)

 方法三:继承自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 {@Overrideprotected 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://download.csdn.net/detail/harvic880925/6657791   (不要分,仅供分享)

 四:实现微信底部导航栏

效果:

 

参看博客:http://blog.csdn.net/wangkuifeng0118/article/details/7745109

 源码地址:http://download.csdn.net/detail/harvic880925/6657767   (不要分,仅供分享)

 

 请大家尊重作者版权,转载请标明出处:http://blog.csdn.net/harvic880925/article/details/17120325

 

原创粉丝点击