android基础知识27:TabHost01——简单应用

本文详细介绍了在Android应用中使用TabHost选项卡的方法,包括从layoutid创建各个tab页、动态创建tab页内容以及通过传递intent传递参数并以新启动的activity作为tab页内容的实现方式。同时提供了TabHost的两种实现方式和实例代码下载地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Android应用中,经常会用到TabHost选项卡,这里借花献佛,把apiDemo例子中的使用方法列举出来,,,
常用的方法有三种:
1. 从一个layout id创建各个tab页

public class Tabs1 extends TabActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TabHost tabHost = getTabHost();
        
        LayoutInflater.from(this).inflate(R.layout.tabs1, tabHost.getTabContentView(), true);
        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator("tab1")
                .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));
    }
}
2. 动态创建一个view来做为tab页的内容

public class Tabs2 extends TabActivity implements TabHost.TabContentFactory {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final TabHost tabHost = getTabHost();
        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator("tab1", getResources().getDrawable(R.drawable.star_big_on))
                .setContent(this));
        tabHost.addTab(tabHost.newTabSpec("tab2")
                .setIndicator("tab2")
                .setContent(this));
        tabHost.addTab(tabHost.newTabSpec("tab3")
                .setIndicator("tab3")
                .setContent(this));
    }
    /** {@inheritDoc} */
    public View createTabContent(String tag) {
        final TextView tv = new TextView(this);
        tv.setText("Content for tab with tag " + tag);
        return tv;
    }
}
3. 传递一个intent来传递参数,并以新启动的activity做为tab页的内容,这个应该是比较方便传递参数的。。。

public class Tabs3 extends TabActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final TabHost tabHost = getTabHost();
        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator("list")
                .setContent(new Intent(this, List1.class)));
        tabHost.addTab(tabHost.newTabSpec("tab2")
                .setIndicator("photo list")
                .setContent(new Intent(this, List8.class)));
        
        // This tab sets the intent flag so that it is recreated each time
        // the tab is clicked.
        tabHost.addTab(tabHost.newTabSpec("tab3")
                .setIndicator("destroy")
                .setContent(new Intent(this, Controls2.class)
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)));
    }
}

TabHost的实现有两种方式,第一种继承TabActivity,从TabActivity中用getTabHost()方法获取TabHost。各个Tab中的内容在布局文件中定义就行了。

mainActivity.xml

private TabHost myTabHost;  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        //setContentView(R.layout.main);  
       myTabHost = this.getTabHost();  
        LayoutInflater.from(this).inflate(R.layout.main,  
                myTabHost.getTabContentView(), true);  
        myTabHost.addTab(myTabHost  
                .newTabSpec("选项卡1")  
                .setIndicator("选项卡1",  
                        getResources().getDrawable(R.drawable.img01))  
                .setContent(R.id.ll01));  
        myTabHost.addTab(myTabHost  
                .newTabSpec("选项卡2")  
                .setIndicator("选项卡2",  
                        getResources().getDrawable(R.drawable.img02))  
                .setContent(R.id.ll01));  
        myTabHost.addTab(myTabHost  
                .newTabSpec("选项卡3")  
                .setIndicator("选项卡3",  
                        getResources().getDrawable(R.drawable.img03))  
                .setContent(R.id.ll03));  
    }  
Tab内容布局文件:

<?xml version="1.0" encoding="utf-8"?>  
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical" android:layout_width="fill_parent"  
    android:layout_height="fill_parent">  
    <LinearLayout android:id="@+id/ll01" android:layout_width="fill_parent"  
        android:layout_height="fill_parent" android:gravity="center_horizontal"  
        android:orientation="vertical">  
        <EditText android:id="@+id/widget34" android:layout_width="fill_parent"  
            android:layout_height="wrap_content" android:text="EditText"  
            android:textSize="18sp">  
        </EditText>  
        <Button android:id="@+id/widget30" android:layout_width="wrap_content"  
            android:layout_height="wrap_content" android:text="Button">  
        </Button>  
    </LinearLayout>  
    <LinearLayout android:id="@+id/ll02" android:layout_width="fill_parent"  
        android:layout_height="fill_parent" android:gravity="center_horizontal"  
        android:orientation="vertical">  
        <AnalogClock android:id="@+id/widget36"  
            android:layout_width="wrap_content" android:layout_height="wrap_content">  
        </AnalogClock>  
    </LinearLayout>  
    <LinearLayout android:id="@+id/ll03" android:layout_width="fill_parent"  
        android:layout_height="fill_parent" android:gravity="center_horizontal"  
        android:orientation="vertical">  
        <RadioGroup android:id="@+id/widget43"  
            android:layout_width="166px" android:layout_height="98px"  
            android:orientation="vertical">  
            <RadioButton android:id="@+id/widget44"  
                android:layout_width="wrap_content" android:layout_height="wrap_content"  
                android:text="RadioButton">  
            </RadioButton>  
            <RadioButton android:id="@+id/widget45"  
                android:layout_width="wrap_content" android:layout_height="wrap_content"  
                android:text="RadioButton">  
            </RadioButton>  
        </RadioGroup>  
    </LinearLayout>  
</FrameLayout>  

第二种方式,不继承TabActivity,在布局文件中定义TabHost即可,但是TabWidget的id必须是@android:id/tabs,FrameLayout的id必须是@android:id/tabcontent。

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    android:id="@+id/hometabs"  
    android:orientation="vertical"  
    android:layout_width="fill_parent"    
    android:layout_height="fill_parent">   
    <TabHost android:id="@+id/tabhost"  
         android:layout_width="fill_parent"  
         android:layout_height="wrap_content">  
         <LinearLayout  
            android:orientation="vertical"  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent">  
              
             <TabWidget android:id="@android:id/tabs"   
              android:orientation="horizontal"  
              android:layout_width="fill_parent"  
              android:layout_height="wrap_content">  
            </TabWidget>  
           
             <FrameLayout android:id="@android:id/tabcontent"  
                  android:layout_width="wrap_content"  
                  android:layout_height="wrap_content">  
                      <TextView android:id="@+id/view1"  
                        android:layout_width="fill_parent"  
                        android:layout_height="fill_parent" android:text="Tab1"/>  
                    <TextView android:id="@+id/view2"  
                        android:layout_width="fill_parent"  
                        android:layout_height="fill_parent" android:text="Tab2"/>  
                    <TextView android:id="@+id/view3"  
                        android:layout_width="fill_parent"  
                        android:layout_height="fill_parent" android:text="Tab3"/>  
             </FrameLayout>  
           
         </LinearLayout>  
    </TabHost>  
</LinearLayout>  
mainActivity

@Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        TabHost tabHost = (TabHost) findViewById(R.id.tabhost);  
        tabHost.setup();  
        TabWidget tabWidget = tabHost.getTabWidget();  
        tabHost.addTab(tabHost  
                .newTabSpec("tab1")  
                .setIndicator("tab1",  
                        getResources().getDrawable(R.drawable.img01))  
                .setContent(R.id.view1));  
        tabHost.addTab(tabHost  
                .newTabSpec("tab2")  
                .setIndicator("tab2",  
                        getResources().getDrawable(R.drawable.img02))  
                .setContent(R.id.view2));  
        tabHost.addTab(tabHost  
                .newTabSpec("tab3")  
                .setIndicator("tab3",  
                        getResources().getDrawable(R.drawable.img03))  
                .setContent(R.id.view3));  
实例代码下载地址: Tab.rar


参考资料:

Android学习笔记-TabHost选项卡使用

TabHost两种实现方式

Tab与TabHost



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值