Comment puis-je afficher par programme un sablier dans une application Android?Hourglass android
21
A
Répondre
45
Vous pouvez utiliser un ProgressDialog
:
ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage("Thinking...");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();
Le code ci-dessus montre la boîte de dialogue suivante au-dessus de votre Activity
:
Sinon (ou en plus), vous pouvez afficher un progrès indicateur dans la barre de titre de votre Activity
.
Vous need to request this as a feature près du sommet de la méthode onCreate()
de votre Activity
en utilisant le code suivant:
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
Puis tourner comme ça:
setProgressBarIndeterminateVisibility(true);
et tournez comme ceci:
setProgressBarIndeterminateVisibility(false);
3
Voici un exemple simple de le faire en utilisant AsyncTask:
public class MyActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
...
new MyLoadTask(this).execute(); //If you have parameters you can pass them inside execute method
}
private class MyLoadTask extends AsyncTask <Object,Void,String>{
private ProgressDialog dialog;
public MyLoadTask(MyActivity act) {
dialog = new ProgressDialog(act);
}
protected void onPreExecute() {
dialog.setMessage("Loading...");
dialog.show();
}
@Override
protected String doInBackground(Object... params) {
//Perform your task here....
//Return value ... you can return any Object, I used String in this case
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return(new String("test"));
}
@Override
protected void onPostExecute(String str) {
//Update your UI here.... Get value from doInBackground ....
if (dialog.isShowing()) {
dialog.dismiss();
}
}
}
Le problème est que, après l'affichage de la boîte de dialogue je courais un traitement relativement longue qui empêche l'affichage de la boîte de dialogue qui apparaît à la fin de traitement quand je n'en ai plus besoin! – Arutha
Jetez un oeil à 'AsyncTask'. Vous affichez et cachez 'ProgressDialog' dans' onPreExecute() 'et' onPostExecute' et faites votre travail dans 'doInBackground'. http://android-developers.blogspot.com/2009/05/painless-threading.html –
Pourrait également être utile de lire le Guide du développeur Android "Designing For Responsiveness" http://developer.android.com/guide/practices/ design/responsiveness.html –