2012-07-24 42 views
14

我已经看过Stack Overflow的帖子和其他网站上的教程,我无法理解如何使用TabHost。有人可以给我解释,也可以给我一个链接到教程?我该如何使用tabHost for Android

+7

TabHost已弃用,建议您改用Fragments。以下是关于片段的教程:http://www.vogella.com/articles/Android/article.html#fragments_tutorial如果您确实想使用TabHost,也许别人可以提供帮助。我没有太多的经验。祝你好运! – 2012-07-24 00:57:40

+0

tabHosts和fragment之间真的存在关系吗? – 2014-07-19 06:45:24

+1

@AndyHarris TabHost不被弃用。 TabActivity是。请停止传播虚假谣言。 – aldok 2017-05-13 04:22:32

回答

66

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); 
    
    
    } 
    } 
    
  • 在此交流tivity不使用布局“activity_main.xml”。

  • Tabhost mTab​​Host = getTabHost();是创建主选项卡。

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

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

  • setContent(新意图(这一点,FirstActivity.class))是FirstActivity.class(FirstActivity.java)使用的内容

  • mTab​​Host.addTab(....)是添加spectab主标签

  • mTab​​Host.setCurrentTab(0)是起始页面时的折痕标签。

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

完成!!!!!而所有的TabHost

enter image description here

+0

标签不显示...为什么? – guiomie 2013-10-05 20:37:25

+1

getTabHost()对我不起作用。它不作为资源导入。 – Eenvincible 2014-02-15 20:06:01

+0

@Eenvincible你应该有你的活动扩展TabActivity – Jimmar 2014-07-18 15:51:40

0

首先不会被弃用,TabActivity在另一方面已被弃用由于Fragment API。

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

1.使用片段通过FragmentTabHost

此示例代码展示了如何在活动中使用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> 

实际使用片段,您可以用Tab片段(Android docs)内。

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