web-dev-qa-db-ja.com

AndroidにtabHostを使用する方法

Stack Overflowの投稿や他のWebサイトのチュートリアルを見てきましたが、TabHostの使用方法を理解できません。誰かがそれを私に説明してください、そしておそらく私にチュートリアルへのリンクを送ってもらえますか?

18
Steven

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);
    
    
    }
    }
    
  • このアクティビティでは、レイアウト "activity_main.xml"を使用しません。

  • Tabhost mTab​​Host = getTabHost();メインタブを作成します。

  • mTabHost.newTabSpec( "first")はtabspec id "first"を作成します。

  • setIndicator( "First")は、タイトルタブにテキスト「First」を作成します。

  • setContent(new Intent(this、FirstActivity.class))はFirstActivity.class(FirstActivity.Java)のコンテンツを使用します

  • mTabHost.addTab(....)は、メインタブにspectabを追加します

  • mTabHost.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

完了!!!!!

enter image description here

71
jiw_cs

まず、TabHostは非推奨ではありませんが、TabActivityFragment AP​​Iにより非推奨です。

TabHostを使用するには2つの方法があります。 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 を使用することをお勧めします。

5
aldok