zoukankan      html  css  js  c++  java
  • tabhost使用

    Tabhost用法

    使用方法一:使用同一个布局文件

    在xml中如此定义tabhost:

    <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"

        android:paddingLeft="@dimen/activity_horizontal_margin"

        android:paddingRight="@dimen/activity_horizontal_margin"

        android:paddingTop="@dimen/activity_vertical_margin"

        tools:context="com.example.hello.MainActivity" >

     

        <TabHost

            android:id="@+id/mytabhost"

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:layout_alignParentBottom="true"

            android:layout_alignParentLeft="true" >

     

            <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" >

     

                    <LinearLayout

                        android:id="@+id/tab1"

                        android:layout_width="match_parent"

                        android:layout_height="match_parent"

                        android:orientation="vertical" >

                        <TextView

                            android:id="@+id/text1"

                        android:layout_width="match_parent"

                        android:layout_height="match_parent"

                        android:text="hellllllll"></TextView>

                    </LinearLayout>

     

                    <LinearLayout

                        android:id="@+id/tab2"

                        android:layout_width="match_parent"

                        android:layout_height="match_parent"

                        android:orientation="vertical">

                        <TextView

                            android:id="@+id/text2"

                        android:layout_width="match_parent"

                        android:layout_height="match_parent"

                        android:text="hellllllll"></TextView>

                    </LinearLayout>

     

                    <LinearLayout

                        android:id="@+id/tab3"

                        android:layout_width="match_parent"

                        android:layout_height="match_parent"

                        android:orientation="vertical">

                        <ImageView

                             android:id="@+id/img1"

                           android:layout_width="wrap_content"

                            android:layout_height="wrap_content"

                             android:src="@drawable/ic_launcher"/>

                    </LinearLayout>

                   

                </FrameLayout>

            </LinearLayout>

        </TabHost>

     

    </RelativeLayout>

    对应的activity中这么写:

    public class Tabs extends ActionBarActivity{

             TabHost tabHost=null;

             TabSpec spec=null;

             @Override

             protected void onCreate(Bundle savedInstanceState) {

                       // TODO Auto-generated method stub

                       super.onCreate(savedInstanceState);

                       setContentView(R.layout.tabs);

                       tabHost=(TabHost)findViewById(R.id.mytabhost);

                       tabHost.setup();//这句必须写,不然崩溃

                       //实现标签、id、设置content,三者缺一不可,最后将其添加到tabhost

                      

                       spec=tabHost.newTabSpec("tag1");

                       spec.setIndicator("课程");

                       spec.setContent(R.id.tab1);

                       tabHost.addTab(spec);

                      

                       spec=tabHost.newTabSpec("tag2");

                       spec.setIndicator("论坛");

                       spec.setContent(R.id.tab2);

                       tabHost.addTab(spec);

                      

                       spec=tabHost.newTabSpec("tag3");

                       spec.setIndicator("我的");

                       spec.setContent(R.id.tab3);

                       tabHost.addTab(spec);

             }

    }

    也可以通过以下java代码创建一个新的tab

    spec=tabHost.newTabSpec("tag4");

            spec.setContent(new TabHost.TabContentFactory() {

                   

                @Override

                public View createTabContent(String tag) {

                    // TODO Auto-generated method stub

                    TextView textView=new TextView(Tabs.this);

                    textView.setText("123456");

                    return textView;

                }

            });

            spec.setIndicator("new");

            tabHost.addTab(spec);

    设置content的三种方式:

    1)  使用布局文件

    2)  用TabHost.TabContentFactory(如上面的java代码)

    3)  用启动另一个布局的intent对象

    以上三者均可以作为setContent的参数

    设置indicator

    可以是字符串、布局文件、图片。

     

    注意:

    1)  xml中FrameLayout中定义的布局,要都使用,如果不是用的话就会造成,未使用的布局和其他标签重合的现象。如下:

     

    使用方法二:每个tab用不同的布局文件,使用LayoutInflater动态加载

    Xml:

    Tab1:

    <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:paddingBottom="@dimen/activity_vertical_margin"

        android:paddingLeft="@dimen/activity_horizontal_margin"

        android:paddingRight="@dimen/activity_horizontal_margin"

        android:paddingTop="@dimen/activity_vertical_margin"

        tools:context="com.example.tabhost.MainActivity"

        android:orientation="vertical"

        android:id="@+id/tab1">

     

        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/app_name" />

     

    </LinearLayout>

    Tab2:

    <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:paddingBottom="@dimen/activity_vertical_margin"

        android:paddingLeft="@dimen/activity_horizontal_margin"

        android:paddingRight="@dimen/activity_horizontal_margin"

        android:paddingTop="@dimen/activity_vertical_margin"

        tools:context="com.example.tabhost.MainActivity"

        android:orientation="vertical"

        android:id="@+id/tab2">

     

        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="第二个tab" />

     

    </LinearLayout>

    activity_main.xml:

    <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"

        android:paddingLeft="@dimen/activity_horizontal_margin"

        android:paddingRight="@dimen/activity_horizontal_margin"

        android:paddingTop="@dimen/activity_vertical_margin"

        tools:context="com.example.tabhost.MainActivity" >

     

        <TabHost

            android:id="@+id/tabhost"

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:layout_alignParentLeft="true"

            android:layout_alignParentTop="true"

            android:layout_marginTop="22dp" >

     

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

     

    </RelativeLayout>

    Activity:

    MainActivity:

    package com.example.tabhost;

    import android.support.v7.app.ActionBarActivity;

    import android.text.Layout;

    import android.os.Bundle;

    import android.view.LayoutInflater;

    import android.view.Menu;

    import android.view.MenuItem;

    import android.view.ViewGroup;

    import android.widget.TabHost;

    public class MainActivity extends ActionBarActivity {

            

             @Override

             protected void onCreate(Bundle savedInstanceState) {

                       super.onCreate(savedInstanceState);

                       setContentView(R.layout.activity_main);

                      

                       TabHost tabHost=(TabHost)findViewById(R.id.tabhost);

                       tabHost.setup();

                      

                       LayoutInflater inflater=LayoutInflater.from(this);

                       inflater.inflate(R.layout.tab1, tabHost.getTabContentView());//getTabContentView返回framelayout对应的view

                       inflater.inflate(R.layout.tab2, tabHost.getTabContentView());

                      

                       tabHost.addTab(tabHost.newTabSpec("状元").setContent(R.id.tab1).setIndicator("状元"));

                       tabHost.addTab(tabHost.newTabSpec("榜眼").setContent(R.id.tab2).setIndicator("榜眼"));

                      

             }

            

    }

    使用方法三:继承TabActivity

    Xml:

    继承tabActivity后只需要把用到的各个tab布局写好,跟标签一般是FrameLayout也试过LinearLayout也可以

                <FrameLayout

                     xmlns:android="http://schemas.android.com/apk/res/android"

        xmlns:tools="http://schemas.android.com/tools"

                    android:id="@android:id/tabcontent"

                    android:layout_width="match_parent"

                    android:layout_height="match_parent"

                    android:orientation="vertical" >

     

                    <LinearLayout

                        android:id="@+id/tab1"

                        android:layout_width="match_parent"

                        android:layout_height="match_parent"

                        android:orientation="vertical" >

                        <TextView

                            android:id="@+id/text1"

                        android:layout_width="match_parent"

                        android:layout_height="match_parent"

                        android:text="hellllllll"></TextView>

                    </LinearLayout>

     

                    <LinearLayout

                        android:id="@+id/tab2"

                        android:layout_width="match_parent"

                        android:layout_height="match_parent"

                        android:orientation="vertical">

                        <TextView

                            android:id="@+id/text2"

                        android:layout_width="match_parent"

                        android:layout_height="match_parent"

                        android:text="hemmmmmmm">

                        </TextView>

                    </LinearLayout>

     

                    <LinearLayout

                       

                        android:id="@+id/tab3"

                        android:layout_width="match_parent"

                        android:layout_height="match_parent"

                        android:orientation="vertical">

                        <ImageView

                             android:id="@+id/img1"

                           android:layout_width="wrap_content"

                            android:layout_height="wrap_content"

                             android:src="@drawable/ic_launcher"/>

                    </LinearLayout>

                 

                   

                </FrameLayout>

    Activity:

    package com.example.tab;

    import android.support.v7.app.ActionBarActivity;

    import android.app.TabActivity;

    import android.os.Bundle;

    import android.view.LayoutInflater;

    import android.view.Menu;

    import android.view.MenuItem;

    import android.widget.ImageView;

    import android.widget.TabHost;

    import android.widget.TabHost.TabSpec;

    public class MainActivity extends TabActivity {

             TabHost tabHost=null;

             TabSpec spec=null;

             ImageView imageView=null;

             @Override

             protected void onCreate(Bundle savedInstanceState) {

                       super.onCreate(savedInstanceState);

                       tabHost=getTabHost();//和第一种方法不同在于直接用getTabHost获得tabhost

                       //且不用调用setup()函数

                       LayoutInflater.from(this).inflate(R.layout.activity_main, tabHost.getTabContentView());

                       spec=tabHost.newTabSpec("tag1");

                       spec.setIndicator("课程",getResources().getDrawable(R.drawable.picture));

                       spec.setContent(R.id.tab1);

                       tabHost.addTab(spec);

                      

                       spec=tabHost.newTabSpec("tag2");

                       spec.setIndicator("论坛");

                       spec.setContent(R.id.tab2);

                       tabHost.addTab(spec);

                      

                       spec=tabHost.newTabSpec("tag3");

                       spec.setIndicator("我的");

                       spec.setContent(R.id.tab3);

                       tabHost.addTab(spec);

                      

                       imageView=(ImageView)findViewById(R.id.img1);

             }

    }

     

    监听事件

    标签切换监听:

    tabHost.setOnTabChangedListener(new OnTabChangeListener() {

               

                @Override

                public void onTabChanged(String tabId) {

                    // TODO Auto-generated method stub

    //tabid对应于newTabSpec("tag2")设置的这个标签可

    //用”tag2”.equals(tabid)判读按并处理

                }

            });

     参考:http://blog.csdn.net/harvic880925/article/details/17120325

  • 相关阅读:
    C#知识点总结系列:5、CLR的组成和运转
    SQL知识整理三:变量、全局变量、视图、事务、异常
    SQL知识整理二:锁、游标、索引
    SQL知识整理一:触发器、存储过程、表变量、临时表
    TFS二次开发系列:六、TFS的版本控制
    TFS二次开发系列:五、工作项查询
    TFS二次开发系列:四、TFS二次开发WorkItem添加和修改、保存
    TFS二次开发系列:三、TFS二次开发的第一个实例
    TFS二次开发系列:二、TFS的安装
    TFS二次开发系列:一、TFS体系结构和概念
  • 原文地址:https://www.cnblogs.com/littleby/p/5178755.html
Copyright © 2011-2022 走看看