octobre
2012
Bonjour,
Petite astuce en direct de la formation Android Initiation avancée qui se passe à Paris le 01-02-03 Octobre.
J’ai un stagiaire Romain Zanon, qui se demande comment faire en sorte d’avoir un TabHost avec la barre d’onglets qui défile. Il y a deux choix, soit on se trouve un librairie qui le fait (au risque d’être lié à un obscur développeur qui ne mettra jamais sa lib à jour et qui potentiellement a du code tout pourri), soit on réfléchi quelques secondes.
Tout d’abord, rappelons le code pour afficher des onglets:
Le code Xml du layout est le suivant:
<LinearLayout xmlns:android= »http://schemas.android.com/apk/res/android »
android:layout_width= »fill_parent »
android:layout_height= »fill_parent »
android:orientation= »vertical » >
<TabHost
android:id= »@+id/tabhost »
android:layout_width= »fill_parent »
android:layout_height= »fill_parent » >
<LinearLayout
xmlns:android= »http://schemas.android.com/apk/res/android »
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 » >
<DigitalClock
android:id= »@+id/digital »
android:layout_width= »fill_parent »
android:layout_height= »fill_parent »
android:gravity= »center » />
<AnalogClock
android:id= »@+id/analog »
android:layout_width= »fill_parent »
android:layout_height= »wrap_content »
android:layout_gravity= »center » />
<!–…d’autres onglets…–>
</FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>
Bon, alors comment je fais pour avoir les onglets qui défilent ?o? je peux partir dans de grands hacks de code, tout ça, mais je peux aussi faire très simple, il me suffit de placer ma barre d’onglets dans un HorizontalScrollView et il défileront automatiquement.
Le code:
<LinearLayout xmlns:android= »http://schemas.android.com/apk/res/android »
android:layout_width= »fill_parent »
android:layout_height= »fill_parent »
android:orientation= »vertical » >
<TabHost
android:id= »@+id/tabhost »
android:layout_width= »fill_parent »
android:layout_height= »fill_parent » >
<LinearLayout
xmlns:android= »http://schemas.android.com/apk/res/android »
android:layout_width= »fill_parent »
android:layout_height= »fill_parent »
android:orientation= »vertical » >
<HorizontalScrollView
android:layout_width= »fill_parent »
android:layout_height= »wrap_content » >
<TabWidget
android:id= »@android:id/tabs »
android:layout_width= »wrap_content »
android:layout_height= »wrap_content » />
</HorizontalScrollView>
<FrameLayout
android:id= »@android:id/tabcontent »
android:layout_width= »fill_parent »
android:layout_height= »fill_parent » >
<DigitalClock
android:id= »@+id/digital »
android:layout_width= »wrap_content »
android:layout_height= »fill_parent »
android:background= »#AA00F0FF »
android:gravity= »center » />
<AnalogClock
android:id= »@+id/analog »
android:layout_width= »fill_parent »
android:layout_height= »wrap_content »
android:layout_gravity= »center »
android:background= »#AAFF00FF » />
</FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>
Et voilà, une barre d’onglets qui défilent, c’est compatible pour toutes les versions du système et vous vous n’avez qu’à modifier votre fichier de Layout pour le mettre en place. Autrement dit, dans 5 secondes votre TabHost possède une barre d’onglets défilante.
Prochaine formation Android2EE sur Paris du 05 au 09 Novembre 2012 ou du 27 au 30 Novembre sur Toulouse, vous aussi devenez un dieu en programmation Android.
Et puis merci qui ? merci Android2ee les gars de chez Google qui nous font ce superbe SDK !!!
ps:Le WordPress de DVP, c’est pas encore ça par contre…
Mathias Séguy
mathias.seguy@android2ee.com
Fondateur Android2EE
Formation – Expertise – Consulting Android.
Ebooks pour apprendre la programmation sous Android.
Retrouvez moi sur Google+
Suivez moi sur Twitter
Rejoignez mon réseau LinkedIn ou Viadeo
4 Commentaires + Ajouter un commentaire
Référence Android
Mots-clés
Archives
- mars 2015
- février 2015
- janvier 2015
- mai 2014
- mars 2014
- janvier 2014
- décembre 2013
- novembre 2013
- septembre 2013
- mai 2013
- mars 2013
- février 2013
- janvier 2013
- décembre 2012
- novembre 2012
- octobre 2012
- septembre 2012
- août 2012
- mai 2012
- avril 2012
- mars 2012
- janvier 2012
- décembre 2011
- novembre 2011
- septembre 2011
Salut
C’est pas stack over flow ici Ca me met la pression de te répondre vite et j’ai juste pas le temps de te répondre vite It’s rush hours all the time in this life
Dans l’idée, tu écris ton fichier xml qui déclare ton TabHost comme indiqué dans le post. Puis tu y rajoutes/supprimes/modifies tes onglets avec le code suivant:
Dans ton onCreate:
// Instanciation of the Tab Host the one that contains the tabPanels
final TabHost tabs = (TabHost) findViewById(R.id.tabhost);
tabs.setup();
Là où tu souhaites modifier tes onglets, tu mets un truc du genre:
private void addTabSpec() {
Toast.makeText(this, « A new tab is created », Toast.LENGTH_LONG).show();
// Retrieve the TabSpec of the TabHost and creating a new entry
TabHost.TabSpec spec = tabHost.newTabSpec(« analogic »);
// Creating a new content to the tabPanel using TabContent factory
spec.setContent(new TabHost.TabContentFactory() {
@Override
public View createTabContent(String tag) {
// This method has to return a view, the tag is the one define by TabSpec
return (new AnalogClock(getApplicationContext()));
}
});
// or using an already defined element:
// spec.setContent(R.id.digital);
// Define the Tab label
spec.setIndicator(« Analogic »);
// Adding the new tabPanel to the TabHost
tabHost.addTab(spec);
}
Bonjour M.Séguy
Je suis entrain de débuter dans le développement d’application Android. je suis entrain de créer tout mes contrôles dynamiquement sans utiliser le fichier XML ressource layout. jusqu’ici j’ai bien avancer dans la creation des boutons et textview que j’ai ensuite affiché.
code bouton:
//fonction creation bouton dynamiquement
private Button CreerButton(float x, float y, int width, int hight)
{
int id = 1;
Button bouton = new Button(this);
bouton.setX(x);
bouton.setY(y);
bouton.setWidth(width);
bouton.setHeight(hight);
bouton.setTextSize(8);
bouton.setText(« Machine1″);
bouton.setId(id++);
return bouton;
}
//ajout de mon bouton dans mon layout
Button bouton = CreerButton(abso, ordo, longs, largs);
layout.addView(bouton);
mon problème actuel est de creer un onglet qui defile suivant la même logique(en ligne de code) et d’y ajouter plus tard mes boutons. je procède ainsi mais ça ne fonctionne pas:
package com.onglet;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.TabWidget;
import android.widget.TextView;
import android.widget.TabHost.TabContentFactory;
import android.widget.TabHost.TabSpec;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
LinearLayout main = new LinearLayout(this);
main.setOrientation(LinearLayout.VERTICAL);
TabHost tabs = new TabHost(this);
tabs.setId(android.R.id.tabhost);
main.addView(tabs);
TabWidget tabWidget = new TabWidget(this);
tabWidget.setId(android.R.id.tabs);
tabs.addView(tabWidget);
FrameLayout tabContent = new FrameLayout(this);
tabContent.setId(android.R.id.tabcontent);
tabContent.setPadding(0, 65, 0, 0);
tabs.addView(tabContent);
TextView content = new TextView(this);
content.setText(« This is the Frame Content »);
content.setId(100);
tabs.setup();
TabSpec tspec1 = tabs.newTabSpec(« Tab1″);
tspec1.setIndicator(« One », this.getResources().getDrawable(android.R.drawable.star_on));
tspec1.setContent(new PreExistingViewFactory(content));
tabs.addTab(tspec1);
TabSpec tspec2 = tabs.newTabSpec(« Tab2″);
tspec2.setIndicator(« Two », this.getResources().getDrawable(android.R.drawable.star_on));
tspec2.setContent(new PreExistingViewFactory(content));
tabs.addTab(tspec2);
TabSpec tspec3 = tabs.newTabSpec(« Tab3″);
tspec3.setIndicator(« Three », this.getResources().getDrawable(android.R.drawable.star_on));
tspec3.setContent(new PreExistingViewFactory(content));
tabs.addTab(tspec3);
setContentView(main);
}
//Makes the content of a tab when it is selected.
class PreExistingViewFactory implements TabContentFactory
{
private final View preExisting;
protected PreExistingViewFactory(View view)
{
preExisting = view;
}
public View createTabContent(String tag)
{
return preExisting;
}
}
}
Merci de m’aider
[…] JavaOne, JavaOne 2012 Onglet défilant (Tabhost avec un sliding du TabWidget), Formation Android. par MathiasSeguy (02/10/2012 12:16) Bonjour, Petite astuce en direct de la formation Android […]
[…] d’avoir un TabHost avec la barre d’onglets qui défile .Il y a deux choix … http://ANDROID-ACTUALITES.COM actualite sur android vous propose la suite …. Publié dans application | Tags : accompagnees, programmation, recueillis, […]