我如何使用tabHost for Android

时间:2012-07-24 00:35:55

标签: java android xml android-tabhost

我查看了Stack Overflow上的帖子以及其他网站上的教程,我无法理解如何使用TabHost。有人可以向我解释一下,也许可以给我一个教程的链接吗?

2 个答案:

答案 0 :(得分:71)

Concept TabHost

enter image description here

  1. 在ManiActivity中扩展了TabActivity

    public class MainActivity extends TabActivity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        //setContentView(R.layout.activity_main);
    
        TabHost mTabHost = getTabHost();
    
        mTabHost.addTab(mTabHost.newTabSpec("first").setIndicator("First").setContent(new Intent(this  ,FirstActivity.class )));
        mTabHost.addTab(mTabHost.newTabSpec("second").setIndicator("Second").setContent(new Intent(this , SecondActivity.class )));
        mTabHost.setCurrentTab(0);
    
    
    }
    }
    
  2.   
        
    • 在此活动中,不使用布局“activity_main.xml”。

    •   
    • Tabhost mTab​​Host = getTabHost();是创建主标签。

    •   
    • mTab​​Host.newTabSpec(“first”)是创建tabspec id“first”。

    •   
    • setIndicator(“First”)在标题选项卡中创建文本“First”。

    •   
    • setContent(new Intent(this,FirstActivity.class))是来自FirstActivity.class(FirstActivity.java)的内容

    •   
    • mTab​​Host.addTab(....)将主题标签添加到主要标签

    •   
    • 启动页面时,mTabHost.setCurrentTab(0)是defult选项卡。

    •   

    FirstActivity.java

    public class FirstActivity extends Activity{
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
    
        setContentView( R.layout.first_layout );
    }
    
    }
    

    SecondActivity.java

    public class SecondActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
    
        setContentView( R.layout.second_layout );
    }
    }
    
      
        
    • “R.layout.first_layout”是来自first_layout.xml的内容

    •   
    • “R.layout.second_layout”是来自second_layout.xml的内容

    •   

    在AndroidManifest.xml中,在示例xml中添加活动名称“.FirstActivity”和“.SecondActivity”。

    enter image description here

    完成!!!!!

    enter image description here

答案 1 :(得分:4)

首先,在TabHost未弃用的情况下,TabActivity由于Fragment API而被弃用。

使用TabHost有两种方法;通过FragmentTabHost使用片段并使用TabHost.TabContentFactory

<强> 1。通过FragmentTabHost

使用片段

此示例代码显示如何在Activity中使用TabHost。

<强> FragmentTabHostActivity.java

public class FragmentTabHostActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_tab_host_activity);

        FragmentTabHost fragmentTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
        fragmentTabHost.setup(this, getSupportFragmentManager(), android.R.id.tabcontent);
        fragmentTabHost.addTab(getTabSpec1(fragmentTabHost), Tab1Fragment.class, null);
        fragmentTabHost.addTab(getTabSpec2(fragmentTabHost), Tab2Fragment.class, null);
    }

    private TabHost.TabSpec getTabSpec1(FragmentTabHost tabHost) {
        return tabHost.newTabSpec("First Tab")
            .setIndicator("Tab1");
    }

    private TabHost.TabSpec getTabSpec2(FragmentTabHost tabHost) {
        return tabHost.newTabSpec("Second Tab")
            .setIndicator("Tab 2");
    }
}

<强> fragment_tab_host_activity.xml

<android.support.v4.app.FragmentTabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android: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"/>

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    </LinearLayout>

</android.support.v4.app.FragmentTabHost>

实际上,通过使用Fragment,您可以在片段(Android docs)中使用Tab。

<强> 2。使用TabHost.ContentFactory

<强> TabHostActivity.java

public class TabHostActivity extends AppCompatActivity implements TabHost.TabContentFactory {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

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

        tabHost.addTab(getTabSpec1(tabHost));
        tabHost.addTab(getTabSpec2(tabHost));
    }

    private TabHost.TabSpec getTabSpec1(TabHost tabHost) {
        return tabHost.newTabSpec("First Tab")
            .setIndicator("Tab1")
            .setContent(this);
    }

    private TabHost.TabSpec getTabSpec2(TabHost tabHost) {
        return tabHost.newTabSpec("Second Tab")
            .setIndicator("Tab 2")
            .setContent(this);
    }

    @Override
    public View createTabContent(String tag) {
        return LayoutInflater.from(this).inflate(R.layout.activity_tab_1, null);
    }
}

<强> activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<TabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android: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"/>

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    </LinearLayout>

</TabHost>

但是,我个人建议使用最新的Material Design style TabLayout class