Question de mise en page Android Tabhost
-
10-10-2019 - |
Question
Ceci est ma première application à onglets pour Android. J'ai parcouru l'application "HellotabWidget" sur le site Web d'Androids, mais je ne peux pas comprendre comment ajouter du contenu aux onglets. Le Framelayout empile des trucs les uns sur les autres en haut à gauche (d'après ce que j'ai lu). J'ai ajouté quelques textes et une vue ImageView, mais il affiche uniquement le dernier élément ajouté. Existe-t-il un moyen d'utiliser la disposition linéaire au lieu de la disposition du cadre? Sinon, comment pouvez-vous placer plusieurs vues dans l'onglet? La seule chose que j'ai faite différente de l'exemple est que j'ai ajouté un 4ème onglet. Dans l'une des activités d'onglet, j'ai inséré le code suivant pour essayer d'obtenir plusieurs éléments à afficher:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textview = new TextView(this);
textview.setText("This is the About tab");
setContentView(textview);
TextView textview2 = new TextView(this);
textview2.setText("About Test");
setContentView(textview2);
ImageView imgView = new ImageView(this);
imgView.setImageDrawable(getResources().getDrawable(R.drawable.header));
setContentView(imgView);
}
Voici le lien vers l'exemple que j'ai suivi:http://developer.android.com/resources/tutorials/views/hello-tabwidget.html
La solution
Quel est votre fichier XML de mise en page? J'utilise ceci et je peux empiler plusieurs TextView dans chaque onglet. TabActivity:
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ScrollView android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
</ScrollView>
</TabHost>
Onglet Activité à l'intérieur:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView android:id="@+id/textOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/textTwo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<LinearLayout>
Je suis moi-même un débutant, donc il pourrait y avoir une meilleure façon de le faire. Cela fonctionne pour moi, cependant.
Autres conseils
Vous n'avez pas lu avec attentivement l'exemple. Jetez un œil au point numéro 6; Vous verrez quelque chose comme:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Resources res = getResources(); // Resource object to get Drawables
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent().setClass(this, ArtistsActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("artists").setIndicator("Artists",
res.getDrawable(R.drawable.ic_tab_artists))
.setContent(intent);
tabHost.addTab(spec);
// Do the same for the other tabs
intent = new Intent().setClass(this, AlbumsActivity.class);
spec = tabHost.newTabSpec("albums").setIndicator("Albums",
res.getDrawable(R.drawable.ic_tab_albums))
.setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, SongsActivity.class);
spec = tabHost.newTabSpec("songs").setIndicator("Songs",
res.getDrawable(R.drawable.ic_tab_songs))
.setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(2);
}
C'est ce que vous avez mis dans le surfait pour le TabActivity
. Comme vous pouvez le voir, il a 3 activités. Ce que vous faites est d'utiliser une seule activité et de définir la vue de contenu 3 fois, ce qui est évidemment faux.
Alors ... comment le faire fonctionner? Tout d'abord, relisez le tutoriel. Deuxièmement, créez une activité pour chaque onglet que vous souhaitez afficher. Et utilisez le modèle ci-dessus pour ajouter ces activités à votre TabHost
.