ProgressBar dans une ActionBar, à l'instar de l'application GMail avec Refresh
Je voudrais faire la même chose que l'application GMail sur Nid d'abeille comprimés.
Lorsque vous cliquez sur le bouton Actualiser, l'icône est remplacée par une Barre de progression.
Comment puis-je faire cela?
Ok, j'ai essayé ce Cailean suggéré, mais il ne fonctionne pas pour moi. Chaque fois que je veux revenir progression indéterminée à l'origine sur le bouton, il devient unclickable, j'ai utilisé cette disposition pour le progrès
Le code xml pour actionbar_refresh_progress n'est pas correctement centre de la ProgressBar comme l'icône d'actualisation. Néanmoins, suivi le lien vers le Google IO application et tiré directement de leur actionbar_indeterminate_progress.xml et il fonctionne à merveille! code.google.com/p/iosched/source/browse/android/res/layout/...
Gmail à l'aide d'une action en vue de son actualisation "en cours" de l'état. L'invocation d'une actualisation est faite en utilisant le standard de bouton d'action/onMenuItemSelected chemin.
Lorsque vous entrez votre rafraîchissant de l'état, de définir l'action en vue de l'actualisation MenuItem une ProgressBar. (Créer par programmation, de la gonfler à partir d'un modèle, utilisez actionLayout dans le menu xml comme CommonsWare suggère, ce que vous préférez.) Lorsque vous quittez votre rafraîchissant de l'état, de définir l'action de la vue null tout en gardant une référence de sorte que vous pouvez la définir à nouveau la prochaine fois que vous actualisez. Vous pouvez l'accrocher sur une référence à la MenuItem après vous gonflez le menu et les changements à plus tard, il sera reflété dans la barre d'action.
Cette approche présente certains avantages par rapport à l'aide d'un plein-temps d'action de la vue et de la gestion des autres détails de la modification de l'état de vous-même. Une action en vue remplace complètement le générés sur le bouton d'action pour un élément de menu, bloquant efficacement à l'utilisateur d'être en mesure d'envoyer l'habitude onMenuItemSelected événements pour rafraîchir tout en un rafraîchissement est déjà en cours. Une chose de moins à traiter et de l'action de la vue peut rester complètement non-interactive.
Vous pourriez probablement faire quelque chose d'intelligent avec un ActionProvider de l'API de+ de 14 à encapsuler l'ensemble du processus un peu plus, mais le ci-dessus finit par être assez simple.
J'ai essayé et cela fonctionne sauf dans android 4.0.3 il va se bloquer sur l'écran de changement d'orientation. Est-il un moyen de contourner cela?
Buttink avez-vous la trace de pile d'exception? Semble ok sur JellyBean.
En supposant que vous avez déjà votre élément de menu de configuration, vous aurez besoin de commencer par la création de deux nouveaux modèles. Celui qui contient la mise en page de la normale bouton actualiser, et une autre qui contient le composant progressbar.
Une fois que vous les avez, appelez le morceau de code suivant pour basculer entre les deux modèles. C'est à vous de décider exactement quand il doit être appelé une deuxième fois afin de le remettre à l'icône d'actualisation.
Parfait. Pourriez-vous s'il vous plaît montrer votre refresh_icon.xml mise en page? Chaque fois que j'gonfler ImageView le bouton devient unclickable après l'appel de doRefresh(faux, ...);
Ive fait de cette manière et presque tout fonctionne correctement. Problème, c'est mon progressdialog ne pas les animer. Devient visible, de l'invisible, mais avec aucune animation à tous. Cant comprendre pourquoi.
Fonctionne sur pain d'épice et le reste comme un charme. Notez que j'ai utilisé de la dimension du support de la barre d'action pour la compatibilité. Vous pouvez utiliser @dimen/action_button_min_width au lieu de ICS et jusqu'.
Ok, j'ai essayé ce Cailean suggéré, mais il ne fonctionne pas pour moi. Chaque fois que je veux revenir progression indéterminée à l'origine sur le bouton, il devient unclickable, j'ai utilisé cette disposition pour le progrès
(actionbar_refresh_progress.xml)
et celle-ci à revenir sur le bouton
(actionbar_refresh_button.xml)
mon code était:
Après avoir profité de la source de la Google IO application, en particulier ce fichier: http://code.google.com/p/iosched/source/browse/android/src/com/google/android/apps/iosched/ui/HomeActivity.java j'ai trouvé un autre moyen plus facile.
Maintenant j'ai besoin seulement de la première mise en page avec le progrès et la méthode de travail ressemble à ceci:
Élément de Menu définition:
J'espère que quelqu'un trouve cela utile.
Gmail à l'aide d'une action en vue de son actualisation "en cours" de l'état. L'invocation d'une actualisation est faite en utilisant le standard de bouton d'action/onMenuItemSelected chemin.
Lorsque vous entrez votre rafraîchissant de l'état, de définir l'action en vue de l'actualisation MenuItem une ProgressBar. (Créer par programmation, de la gonfler à partir d'un modèle, utilisez actionLayout dans le menu xml comme CommonsWare suggère, ce que vous préférez.) Lorsque vous quittez votre rafraîchissant de l'état, de définir l'action de la vue null tout en gardant une référence de sorte que vous pouvez la définir à nouveau la prochaine fois que vous actualisez. Vous pouvez l'accrocher sur une référence à la MenuItem après vous gonflez le menu et les changements à plus tard, il sera reflété dans la barre d'action.
Cette approche présente certains avantages par rapport à l'aide d'un plein-temps d'action de la vue et de la gestion des autres détails de la modification de l'état de vous-même. Une action en vue remplace complètement le générés sur le bouton d'action pour un élément de menu, bloquant efficacement à l'utilisateur d'être en mesure d'envoyer l'habitude onMenuItemSelected événements pour rafraîchir tout en un rafraîchissement est déjà en cours. Une chose de moins à traiter et de l'action de la vue peut rester complètement non-interactive.
Vous pourriez probablement faire quelque chose d'intelligent avec un ActionProvider de l'API de+ de 14 à encapsuler l'ensemble du processus un peu plus, mais le ci-dessus finit par être assez simple.
En supposant que vous avez déjà votre élément de menu de configuration, vous aurez besoin de commencer par la création de deux nouveaux modèles. Celui qui contient la mise en page de la normale bouton actualiser, et une autre qui contient le composant progressbar.
Une fois que vous les avez, appelez le morceau de code suivant pour basculer entre les deux modèles. C'est à vous de décider exactement quand il doit être appelé une deuxième fois afin de le remettre à l'icône d'actualisation.
Utiliser la mise en page suivante que l'action de l'affichage de la barre d'action de l'élément de menu.
actionbar_refresh_progress.xml
Puis
Fonctionne sur pain d'épice et le reste comme un charme. Notez que j'ai utilisé de la dimension du support de la barre d'action pour la compatibilité. Vous pouvez utiliser
@dimen/action_button_min_width
au lieu de ICS et jusqu'.Source: https://code.google.com/p/iosched/source/browse/android/res/layout/actionbar_indeterminate_progress.xml?r=f4fd7504d43b25a75cc23b58d6f844f3553b48c3