Android « Material Design » apporte quelques fonctionnalités intéressantes dont :
SnakeBar :
Remplace les « Toasts » en permettant d’afficher brièvement une information tout en autorisant de cliquer pour déclencher une action.
Pour l’utilisez ajouter dans le fichier buid.gradle (Module: app) paragraphe dependencies la ligne : implementation ‘com.android.support:design:xx.+’ où xx corresponds à la version de sdk utilisée dans « dependencies » exemple 26.
puis ajouter le code :
Snackbar.make(findViewById(android.R.id.content), "Vous avez désactivé la permission", Snackbar.LENGTH_LONG).setAction("Paramètres", new View.OnClickListener() { @Override public void onClick(View view) { final Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); final Uri uri = Uri.fromParts("package", getApplicationContext().getPackageName(), null); intent.setData(uri); startActivity(intent); } }).show();
La durée d’affichage peut être :
- LENGTH_INDEFINITE
- LENGTH_LONG
- LENGTH_SHORT
Références : https://guides.codepath.com/android/Displaying-the-Snackbar
https://blog.iamsuleiman.com/material-design-snackbar/
Forcer la saisie numérique dans un text view :
tvTxtPrix = (TextView) findViewById(R.id.Prixmaxi);
tvTxtPrix.setRawInputType(InputType.TYPE_CLASS_NUMBER);
Pour créer et afficher une boite de dialogue (Alert) :
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Titre");
alert.setMessage("Message");
final EditText input = new EditText(this);
//-- Pour forcer la saisie numérique (à retirer pour la saisie de texte)
input.setInputType(InputType.TYPE_CLASS_NUMBER);
alert.setView(input);
//-- Traitement bouton Ok
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Variable = (input.getText().toString());
//-- Traitemnt
});
//-- Traitement bouton annueler
alert.setNegativeButton("Annuler", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Annulation
}
});
//-- Nécessaire pour afficher la boite
alert.show();
Pour quitter le layout si l’utilisateur appuie sur la touche retour :
AlertDialog.Builder diagwindow = new AlertDialog.Builder(context);
//-- Back key pressed
diagwindow.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
finish(); // to finish Activity on which dialog is displayed
}
});
Ou plus rapidement :
new AlertDialog.Builder(MainActivity.this,R.style.AlertDialogCustom)
.setMessage(getResources().getString(R.string.lib_sup_all))
.setCancelable(false)
.setPositiveButton(getResources().getString(R.string.Button_Delete), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//-- Action...
finish();
}
})
.setNegativeButton(getResources().getString(R.string.lib_non), null)
.show();
Dans le cas d’une custom Dialog Box :
//-- Create a Custom Dialog component
final Dialog dialog = new Dialog(context);
//-- tell the Dialog to use the dialog.xml as it's layout description
dialog.setContentView(R.layout.dialog);
dialog.setTitle("Titre");
//-- when back-key is pressed on dialog
dialog.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
finish(); //to finish Activity on which dialog is displayed
}
});
Pour une simple boite d’alerte avec l’icône de l’application :
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setIcon(-1).(R.drawable.ic_launcher);
alert.setTitle("PAS DE MUSIQUE");
alert.setMessage("Téléchargez des musiques sur votre carte SD SVP !");
//-- Traitement bouton Ok
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
finish();
}});
//-- Nécessaire pour afficher la boite
alert.show();
dans le cas ou l’icône est un drawable :
final Drawable dIco = new BitmapDrawable(getResources(),UtilityImg.getPhoto(FicIco));
alertFin.setIcon(-1).setIcon(dIco);
pour appliquer un style à l’alert box :
AlertDialog.Builder alertFin = new AlertDialog.Builder(MainActivity.this, R.style.AlertDialogCustom);
Boite de dialogue customisée avec icône et case à cocher :
final Dialog dialog = new Dialog(AfficList.this);
dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON);
dialog.setContentView(R.layout.dialog_detail);
dialog.setTitle(name);
dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, idIco); //R.drawable.icon
// set the custom dialog components - text, image and button
TextView textName = (TextView) dialog.findViewById(R.id.nomContact);
textName.setText(name);
TextView textNum = (TextView) dialog.findViewById(R.id.numContact);
textNum.setText(num);
final CheckBox checkBox = (CheckBox) dialog.findViewById(R.id.checkLog);
//
checkBox.setChecked(isLog);
//
Button dialogButtonOk = (Button) dialog.findViewById(R.id.btn_ok);
// if button is clicked, close the custom dialog
dialogButtonOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(checkBox.isChecked())
//-- on enregistre que l'on ne veut pas les logs
DbHelper.updateContactLog(dbNumTel,nId,true);
else
DbHelper.updateContactLog(dbNumTel, nId, false);
cursor.requery();
todoAdapter.notifyDataSetChanged();
dialog.dismiss();
}
});
Button dialogButtonDelete = (Button) dialog.findViewById(R.id.btn_delete);
// if button is clicked, close the custom dialog
dialogButtonDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (DbHelper.deleteContact(dbNumTel, name)==1)
{
cursor.requery();
todoAdapter.notifyDataSetChanged();
}
dialog.dismiss();
}
});
dialog.show();
Avec le Layout :
Exemple de boite de dialogue contenant une liste :
//-- Ajout dans une playlist
static void AjoutPlayList(final String[] outputStrArr, final Context ctx) {
final PlaceDataSQL placeData;
final SQLiteDatabase dbMusiques;
final CharSequence[] items;
final ArrayList tPlayList = new ArrayList();
//-- initialisation des variables
Date today = Calendar.getInstance().getTime();
final String DateJour=today.toString();
placeData = new PlaceDataSQL(ctx);
dbMusiques = placeData.getWritableDatabase();
//-- Remplissage du tableau des PlayList
tPlayList.clear();
Cursor c=PlaceDataSQL.getPistes(dbMusiques, "playlist", null);
if (c.getCount()>0)
{c.moveToFirst();
do {
tPlayList.add(c.getString(0));
}while (c.moveToNext());
//-- Affichage de la boite de sélection des PlayList
items = tPlayList.toArray(new CharSequence[tPlayList.size()]);
AlertDialog.Builder builder=new AlertDialog.Builder(ctx)
.setTitle("Choisissez une PlayList")
.setIcon(R.drawable.ic_launcher)
.setItems(items, new DialogInterface.OnClickListener()
{@Override
public void onClick(DialogInterface dialog, int which)
{for (int i=0; i<outputStrArr.length;i++)
PlaceDataSQL.onAjoutMusicPlayList(dbMusiques, tPlayList.get(which), outputStrArr[i],DateJour);
}});
builder.create().show();
}c.close();
}
Autres cas : http://tausiq.wordpress.com/2012/06/16/android-alertdialog-builder-example-code/
Dialog Box customisée :
1°) Ecrire un layout qui décrira la box :
Avec le fichier xml curve_shap dans drawable :
2°) Appel de la dialog box :
// custom dialog
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Title...");
// set the custom dialog components - text, image and button
TextView text = (TextView) dialog.findViewById(R.id.txt_dia);
text.setText("Android custom dialog example!");
;
Button dialogButton = (Button) dialog.findViewById(R.id.btn_yes);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
Références :
http://examples.javacodegeeks.com/android/core/ui/dialog/android-custom-dialog-example/
Pour un message bref (Toast) :
Durée brève : Toast.makeText(MainActivity.this, « Message à afficher », Toast.LENGTH_SHORT).show();
Durée longue : Toast.LENGTH_LONG
Durée autre :
private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds
Pour afficher des messages dans la fenêtre LogCat d'Eclipse :
Log.i("message")
Pour récupérer le click sur un bouton :
public class Mtest extends Activity {
Button b1;
Button b2;
public void onCreate(Bundle savedInstanceState) {
...
b1 = (Button) findViewById(R.id.b1);
b2 = (Button) findViewById(R.id.b2);
b1.setOnClickListener(myhandler1);
b2.setOnClickListener(myhandler2);
...
}
View.OnClickListener myhandler1 = new View.OnClickListener() {
public void onClick(View v) {
// it was the 1st button
}
};
View.OnClickListener myhandler2 = new View.OnClickListener() {
public void onClick(View v) {
// it was the 2nd button
}
};
}
Pour changer le texte d’un bouton : buttonTous.setText(« Tous »);
Votre commentaire