Menu et Preferences

Pour les icônes :  http://developer.android.com/design/style/iconography.html et http://androiddrawableexplorer.appspot.com/

http://www.designshock.com/the-most-complete-android-style-icon-set-15000-icons/

Références :

http://www.bogotobogo.com/Android/android10Menus.php

http://www.javacodegeeks.com/2011/01/android-quick-preferences-tutorial.html

http://www.101apps.co.za/articles/preference-settings.html

Pour les menus (via la touche « menu » du téléphone :

 /////////////////////// MENU /////////////////  
 //Méthode qui se déclenchera lorsque vous appuierez sur le bouton menu du téléphone  
 public boolean onCreateOptionsMenu(Menu menu) {  
   //Création d'un MenuInflater qui va permettre d'instancier un Menu XML en un objet Menu  
   MenuInflater inflater = getMenuInflater();  
   //Instanciation du menu XML spécifier en un objet Menu  
   inflater.inflate(R.menu.menu, menu);  
   return true;  
 }  
 //Méthode qui se déclenchera au clic sur un item  
 public boolean onOptionsItemSelected(MenuItem item) {  
 //On regarde quel item a été cliqué grâce à son id et on déclenche une action  
 switch (item.getItemId()) {  
     case R.id.raz:  
       Toast.makeText(MainActivity.this, "Suppression de tout !", Toast.LENGTH_SHORT).show();  
       return true;  
     case R.id.nettoyer:  
       Toast.makeText(MainActivity.this, "Nettoyage.", Toast.LENGTH_SHORT).show();  
       return true;  
     case R.id.quitter:  
       //Pour fermer l'application il suffit de faire finish()  
       finish();  
       return true;  
     }  
 return false;}  

Il est nécessaire de créer  un fichier XML qui définit l’interface du menu. Dans le dossier « /res », il faut créer un dossier « menu ». Puis dans ce dossier on créer un fichier « menu.xml ». Contenant les différentes optons. Par exemple :

 

Menu via ActionBar pour les appareils 3.x et supérieur :

cf le tuto ici

1°) Ajouter dans gradle (module app) dans la section 

dependencies {
compile 'com.android.support:appcompat-v7:+'

2°) dans l’application ajouter AppCompat

public class xxx extends AppCompatActivity {

3°) Suivre les instructions : https://developer.android.com/training/appbar/setting-up.html

4°) personnalisez la barre de menu en créant dans res/menu un ficher menu.xml :  https://developer.android.com/training/appbar/actions.html

Notamment à l’aide des icônes

5°) afficher la barre de menu en ajoutant dans le code de votre activité :

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.<>, menu);
    return true;
}

Détail des options de menu :

Dans le fichier menu.xml, ajouter pour chaque item la balise  showAsAction (android:showAsAction= »never ») qui permet de spécifier le comportement de l’élément dans une ActionBar, elle peut posséder les valeurs suivantes :

ifRoom : L’élement sera ajouté aux actions principales de l’ActionBar si une place est disponible
never : Ne jamais rajouter l’action aux actions principales de l’ActionBar
always : Toujours rajouter l’action aux actions principales de l’ActionBar. Cette valeur n’est pas conseillé car peut entrainer une superposition d’élement (si nombre de place disponible < nombre d’élément ajouté à l’ActionBar), préférez la valeur ifRoom.
withText : Toujours afficher le texte représentant l’action

Vous pouvez aussi séparer votre barre d’action en deux :

  • La première ActionBar contiendra l’icone de votre application, le titre et la navigation de votre application (Dropdown menu)
  • La deuxième ActionBar contiendra les différentes actions disponibles via votre application

Cette fonctionnalité est disponible qu’à partir de l’API 14 d’Android donc à partir de la version 4.0 d’Android.

Pour séparer votre ActionBar en deux, il suffit de rajouter l’attribut android:uiOptions=”splitActionBarWhenNarrow”sur la balise application (si vous souhaitez séparer votre ActionBar sur toute l’application) ou sur la balise activity (si vous souhaitez séparer votre ActionBar uniquement sur quelques activités cibles) du fichier manifeste de l’application avant la balise :


Puis de rajouter dans le code de l’application :

  inflater.inflate(R.menu.menu, menu);  
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {  
           ActionBar actionBar = getActionBar();  
           actionBar.setDisplayHomeAsUpEnabled(true);  
      }  

Pour pouvoir exécuter l’action de votre choix lors du clic sur l’icone, il faut gérer l’élément android.R.id.home dans la méthode onOptionsItemSelected. Vous pouvez par exemple revenir à l’activité lancée précédemment (onBackPressed : permet de simuler le clic sur le bouton précédant) ou lancer l’activité de votre choix :

 switch (item.getItemId()) {   
   case android.R.id.home:  
         onBackPressed();  

pour gérer les sous menus insérez dans un item du fichier menu la balise , exemple :

 <item android:id="@+id/action3"
        android:title="@string/action3"
        android:orderInCategory="100"
        android:showAsAction="never" >
        <menu>
            <group
                android:checkableBehavior="single"
                >
                <item android:id="@+id/action3_sub1"
                    android:title="@string/action3_sub1"
                    android:orderInCategory="100"
                    android:showAsAction="never" />
                <item android:id="@+id/action3_sub2"
                    android:title="@string/action3_sub2"
                    android:orderInCategory="100"
                    android:showAsAction="never"/>
                <item android:id="@+id/action3_sub3"
                    android:title="@string/action3_sub3"
                    android:orderInCategory="100"
                    android:showAsAction="never" />
            group>
        menu>
    item>

Références :

Tutoriel Android : Apprendre à utiliser la Toolbar d’Android

http://stackoverflow.com/questions/11006749/change-icons-in-actionbar-dynamically

Les préférences :

Pour enregistrer et retrouver des valeurs une fois que l’application est fermée :
Retrouver des valeurs :

      private void getPreferences() {  
           SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);  
           //-- Récupération de la valeur de la variable "numtel"  
           numTel = preferences.getString("numtel", ""); //-- "variable","valeur_par_defaut"  
           }  

Enregistrer des valeurs :

      private void setPreferences() {  
           SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);  
         //-- Enregistrement du n° de tel  
         SharedPreferences.Editor editor = preferences.edit();  
         editor.putString("numtel", numTel); //-- "variable",valeur  
         editor.commit();   
           }  

Stockage dans les preferences de tableaux de valeurs. Il s’agit ici de stocker un tableau dynamique de string :

private ArrayList contacts = new ArrayList(); //-- Définition du tableau de strings
  private boolean saveArray(ArrayList arraycontacts, String arrayName) {   
      SharedPreferences prefs = this.getSharedPreferences("nom_du_fichier_des_preferences", 0);  
       SharedPreferences.Editor editor = prefs.edit();  
       editor.putInt(arrayName +"_size", arraycontacts.size());  
       for(int i=0;i<arraycontacts.size();i++)  
         editor.putString(arrayName + "_" + i, arraycontacts.get(i));  
       return editor.commit();  
      }  

 Exemple de sauvegarde :

contacts.add(« test0 »);
contacts.add(« test1 »);
contacts.add(« test2″);
saveArray(contacts, »contacts »);

 Récupération des valeurs « tableaux » stockées :

 SharedPreferences prefs = context.getSharedPreferences("androtransms",   
          Context.MODE_PRIVATE);  
 int size = prefs.getInt("contacts" + "_size", 0);  
 ArrayList contacts = new ArrayList();  
 for(int i=0;i<size;i++)  
   contacts.add( prefs.getString("contacts" + "_" + i, null));  

Pour un menu constitué de boutons à l’écran :

Déclarer l’activité en Activity implements OnClickListener{

Ajouter l’affectation des boutons (après avoir défini les boutons button bTout, bAlbum;  :

     bTout=(Button)findViewById(R.id.Tout);  
     bTout.setOnClickListener(this);           
     bAlbum=(Button)findViewById(R.id.Album);  
     bAlbum.setOnClickListener(this);  

Puis la gestion du click :

       @Override  
       public void onClick(View v) {  
         switch (v.getId()) {    
         case R.id.Tout:         
         Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.sonyericsson.fmradio");  
         startActivity(LaunchIntent);  
              break;  
         case R.id.Album:      
                   Intent intent = new Intent(ActivityMenuMus.this, mAlbum.class);  
                  startActivityForResult(intent,Var_result);  
            break;  
         case R.id.buttonQuit:  
            Toast.makeText(getApplicationContext(), "Bye Bye", 2).show();  
            finish();  
           break;            
         default:  
           break;  
         }  
       }  

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Articles récents
Commentaires récents
fatima sur Bienvenue !
AdminDroid sur Bienvenue !
fatima sur Bienvenue !
Archives
Catégories
%d blogueurs aiment cette page :