PROGRAMMATION DE COMPOSANTS MOBILES (ANDROID) WIESLAW ZIELONKA WWW.IRIF.UNIV-PARIS-DIDEROT.FR/~ZIELONKA
ActionBar Android recommande d'utiliser ToolBar à la place de ActionBar. Nous allons suivre cette recommandation.
Ajouter Toolbar à l'activité Votre activité doit être dérivée de AppCompatActivity: public class MyActivity extends AppCompatActivity { //... } Dans AndroidManifest.xml changer le style de l'application pour un style sans ActionBar (sinon vous aurez ActionBar et Toolbar en même temps): <application.. android:theme="@style/theme.appcompat.light.noactionbar">
Ajouter Toolbar à l'activité Ajouter Toolbar dans le layout de votre activité et un nouveau espace de noms xml: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/ apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto".. > nouveau espace de noms défini dans layout de l'activité
Ajouter Toolbar à l'activité La suite de fichier layout: alignement en haut du parent <android.support.v7.widget.toolbar android:id="@+id/toolbar" android:layout_alignparentstart="true" android:layout_alignparentleft="true" android:layout_alignparenttop="true" android:layout_width="match_parent" android:layout_height="?attr/actionbarsize" android:background="?attr/colorprimary" android:elevation="4dp" android:theme="@style/themeoverlay.appcompat.actionbar" app:popuptheme="@style/themeoverlay.appcompat.light" /> noter le nouveau espace de noms
Ajouter Toolbar à l'activité Dans oncreate() de l'activité mettre Toolbar comme la barre de l'application: import android.support.v7.widget.toolbar; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_livres); Button titre = (Button) findviewbyid(r.id.titre); Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); setsupportactionbar(toolbar);
Ajouter les items dans Toolbar Créer le répertoire /res/menu s'il n'existe pas. Dans ce répertoire créer un fichier xml: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/livreauteur" android:title="+livre+auteur" app:showasaction="never"/> <item android:id="@+id/livre" android:title="+livre" app:showasaction="ifroom"/> Notez l'espace de noms Indique si élément dans la barre ou dans l'espace de débordement
Alimenter Toolbar avec les items Dans l'activité redéfinir la méthode: @Override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.livres, menu); return true; } Id du menu qui a été défini dans le fichier xml
Définir la méthode qui sera invoquée quand l'utilisateur clique sur un item de Toolbar Redéfinir dans l'activité la méthode : public boolean onoptionsitemselected(menuitem item) { Intent intent; switch( item.itemid() ) { case R.id.livreauteur: intent = new Intent(this, AjouterLivresEtAuteurs.class); startactivity(intent); return true; case R.id.livre: intent = new Intent(this, AjouterTitre.class); startactivity(intent); return true; case R.id.suplivreauteur: intent = new Intent(this, SupprimerLivreAuteur.class); startactivity(intent); return true; case R.id.suplivre: intent = new Intent(this, SupprimerLivres.class); startactivity(intent); return true; default: } return super.onoptionsitemselected(item); Faire un switch en fonction de id de item
Ajouter l'action Up dans la barre Dans AndroidManifest.xml déclarer le parent de l'activité : <activity android:name=".ajoutertitre" android:parentactivityname=".livres"> <meta-data android:name="android.support.parent_activity" android:value=".livres"/> </activity> Le parent de l'activité AjouterTitre est l'activité Livres. Notez la double déclaration du parent - différentes versions d'android utilisent de méthodes différentes.
Ajouter l'action Up dans la barre Dans la méthode oncreate() de l'activité ajouter l'appel à setdisplayhomeasupenabled(): protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_ajouter_titre); Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); setsupportactionbar(toolbar); getsupportactionbar().setdisplayhomeasupenabled(true);
DialogFragment Google recommande l'utilisation de DialogFragment Donc on considère que tout autre type de dialogue est périmé et ne devait pas être utilisé.
DialogFragment Le dialogue dans Android est asynchrone : quand le dialogue est lancé le code qui suit continue à être exécuté, le programme n'attend pas le résultat du dialogue. La communication entre le dialogue et l'activité qui a lancé le dialogue se fait par les fonctions callback exactement comme pour la communication entre un fragment et l'activité qui utilise le fragment.
DialogFragment Ecrire un fichier layout pour DialogFragment : dans l'exemple le layout est composé de TextView EditTexte et trois Buttons
DialogFragment DialogFragment ressemble à n'importe quel Fragment. Dans DialogFragment définir l'interface de communication avec l'activité (l'activité peut utiliser ce dialogue si elle implémentée l'interface).
DialogFragment Implémenter les méthodes : méthode static newinstance qui retourne le Dialogue public void onattach(activity act) - vérification si DialogFragment peut communiquer avec l'activité public void oncreate(bundle icicle) - définir le style et thème du dialogue public View oncreateview(layoutinflater inflater, ViewGroup container, Bundle icicle) crée le view (inflate) de DialogFragment à partir de fichier layout public void oncancel(dialoginterface di) appelée si cancel() sur le dialogue public void ondismiss(dialoginterface di) appelée si on tourne l'appareil (et pas uniquement)
Lancer le DialogFragment dans l'activité FragmentTransaction ft = getfragmentmanager().begintransaction(); PromptDialogFragment pdf = PromptDialogFragment.newInstance( "Enter Something"); pdf.show(ft, PROMPT_DIALOG_TAG); /* show() à la place de commit() */ et implémenter l'interface de communication avec DialogFragment