web-dev-qa-db-fra.com

Mettez une barre de progression sur ActionBar

J'essaie de mettre une barre de progression indéterminée sur la barre d'action. J'utilisais une actionView pour mettre la barre de progression comme l'application Google+ par exemple.

<item
    Android:id="@+id/menu_progress"
    Android:actionLayout="@layout/action_progress"
    Android:menuCategory="container"
    Android:showAsAction="always">
</item>

le problème est que la barre de progression est considérée comme un élément et, par conséquent, sur un mode portrait Nexus S, je n'ai qu'un autre élément sur la barre d'action tandis que sur Google+, je peux voir deux éléments plus la barre de progression. Comment est-il possible de mettre une barre de progression en utilisant la barre d'action Android?

52
Matroska

REMARQUE: La fonctionnalité ci-dessous est désormais déconseillée dans la bibliothèque de support.

Vous devez appeler

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)

dans votre onCreate() avant de définir l'agencement de l'activité :

par exemple.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    ... // set layout etc

Si vous utilisez bibliothèque de support remplacez requestWindowFeature par supportRequestWindowFeature

Et puis appelez

setProgressBarIndeterminateVisibility(true);

sur votre activité chaque fois que vous souhaitez afficher le spinner de progression.

166
Kuffs

Ma situation nécessitait de mettre à jour la barre de progression à partir d'un fragment à l'aide de la Android Support Library version 4.

Dans mon "MainActivity étend ActionBarActivity" comme suggéré par Jokeefe:

supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

avant

setContentView(R.layout.activity_main);

Dans la tâche de longue haleine de mon fragment:

onPreExecute

actionBarActivity.setSupportProgressBarIndeterminateVisibility(true);

onPostExecute

actionBarActivity.setSupportProgressBarIndeterminateVisibility(false);
menu.clear();
actionBarActivity = (ActionBarActivity)getActivity();
actionBarActivity.supportInvalidateOptionsMenu();

Je ne sais pas si cela répond à l'OP mais c'est ce qui a fonctionné pour moi sur la base des messages ci-dessus. J'espère que cela t'aides.

0
HostMyBus