web-dev-qa-db-fra.com

Comment utiliser tabHost pour Android

J'ai consulté des articles sur Stack Overflow et des didacticiels sur d'autres sites Web, et je ne comprends pas comment utiliser TabHost. Quelqu'un peut-il me l'expliquer et peut-être m'envoyer un lien vers un tutoriel?

18
Steven

Concept TabHost

enter image description here

  1. In ManiActivity étend 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);
    
    
    }
    }
    
  • Dans cette activité, n'utilisez pas la mise en page "activity_main.xml".

  • Tabhost mTabHost = getTabHost (); est de créer l'onglet principal.

  • mTabHost.newTabSpec ("first") est un identifiant tabspec "first".

  • setIndicator ("First") crée le texte "First" dans l'onglet titre.

  • setContent (new Intent (this, FirstActivity.class)) est le contenu de FirstActivity.class (FirstActivity.Java)

  • mTabHost.addTab (....) consiste à ajouter un spectab à l'onglet principal

  • mTabHost.setCurrentTab (0) est l'onglet par défaut lors de la page de démarrage.

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" est le contenu de first_layout.xml

  • "R.layout.second_layout" est le contenu de second_layout.xml

Dans AndroidManifest.xml, ajoutez le nom d'activité ".FirstActivity" et ".SecondActivity" dans l'exemple xml.

enter image description here

Terminer!!!!!

enter image description here

71
jiw_cs

Tout d'abord, alors que TabHost n'est pas obsolète, TabActivity d'autre part est obsolète en raison de Fragment API.

Il existe deux façons d'utiliser TabHost; en utilisant Fragment via FragmentTabHost et en utilisant TabHost.TabContentFactory.

1. Utilisation de Fragment via FragmentTabHost

Cet exemple de code vous montre comment utiliser TabHost dans Activity.

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>

En fait, en utilisant Fragment, vous pouvez utiliser Tab dans un fragment ( Android docs ).

2. En utilisant 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>

Cependant, je recommande personnellement d'utiliser la plus récente style Material Design TabLayout class .

5
aldok