Barre de menus :
1°) créer un fichier menu_main.xml dans res/menu/ menu_main.xml
app:showAsAction never = l’action sera affichée sous les trois points
2°)
http://tutos-android-france.com/menu-ajouter-des-actions-a-lactionbar/
et https://medium.com/@101/android-toolbar-for-appcompatactivity-671b1d10f354
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; } }
Votre commentaire