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?
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.
Terminer!!!!!
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 .