ProgressBar en vertu de la Barre d'Action
Question Résumé: Comment puis-je faire un ProgressBar
intégré à l'intérieur de la ActionBar
, comme sur le Chrome App?
Détails: Regardez cette capture d'écran de google Chrome:
Je veux créer une Barre d'Action comme celui-là. Juste en dessous de la Barre d'Action, il y a une Barre qui se remplit en fonction de chargement de la page. J'ai vu cet exemple de nombreuses applications, comme Feedly, mais je n'ai pas été en mesure de créer ma propre mise en œuvre. J'ai essayé d'utiliser Android propre Api pour la créer:
@Override
protected void onCreate(Bundle savedInstanceState) {
//Request Permission to display the Progress Bar...
this.requestWindowFeature(Window.FEATURE_PROGRESS);
this.setWindowContentView(R.layout.activity_main)
super.onCreate(savedInstanceState);
this.setProgressBarIndeterminate(true);
}
Mais ce code ne cause que la ProgressBar pour montrer sur la Barre d'Action, comme suit:
Alors, comment puis-je faire de ma Barre de progression apparaît sous la Barre d'Action, comme sur le Chrome App?
- une double question de cette réponse : stackoverflow.com/a/10755545/794088
- avez-vous trouvé encore la solution?
- les captures d'écran pour ma grand-mère
Vous devez vous connecter pour publier un commentaire.
C'est maintenant un natif de comportement qui peuvent être obtenues à l'aide de SwipeRefreshLayout.
Vous pouvez envelopper votre défilement de l'affichage avec un
SwipeRefreshLayout
et puis vous avez juste besoin d'écouter onRefresh événements:Une belle et simple tutoriel peut être trouvé dans ce blog.
Je n'étais pas pleinement satisfait de la accepté la réponse ci-dessus, j'ai donc fait quelques recherches complémentaires à moi-même.
Le truc, je crois qu'ils ont utilisé est qu'ils ont récupéré la vue de dessus à la vue de la hiérarchie appelé
DecorView
et ajout de la barre de progression de là. De cette façon, la barre de progression s'affiche à la fois sur la barre d'action ET la zone de contenu. Notez que le S. D. réponse met la barre de progression dans la zone de contenu et 'vole' espace de contenu réel, ce qui peut conduire à des résultats inattendus.Échantillon captures d'écran de cette mise en œuvre:
Code
Viens de mettre ce code dans
onCreate
méthode de l'activité et cela devrait fonctionner:Vous pouvez jouer avec LayoutParams hauteur argument pour définir la progressBar plus large ou plus étroit, mais vous pourriez avoir à ajuster la
-10
décalage.Style
Malheureusement, vous pouvez voir le vilain fond gris de la barre de progression. Pour l'enlever, il suffit de chercher pour l'arrière-plan en identifiant et en essayant de cacher ça ne fonctionne pas. Pour supprimer le fond, j'ai dû créer identiques drawble de la version du système et de supprimer l'élément d'arrière-plan.
TL;DR: Créer un fichier
progress_horizontal_holo_no_background_light.xml
et collez cette drawable:Copie appropriée .png un drawable de
sdk/platforms/android-xx/data/res/drawable-xxx/
à votre projet, puis dans le code, vous pouvez ajouter:Supplémentaire: Barre De Progression Indéterminée
Pré-KitKat versions indéterminée, les barres de progression sont assez moches, et de lag.
Vous pouvez télécharger de nouveaux lisse progressBar appelé
ButteryProgressBar
. Il suffit de chercher sur google (je ne pouvez pas poster des liens, parce que je suis nouveau ici :[ ), ajouter la classe dans votre projet et vous pouvez simplement remplacer la précédente ProgressBar avec ce code et croustillant barre de progression indéterminée:Vous pourriez aussi avoir besoin de simplifier ce code:
à ce code:
Espère que j'ai aidé 🙂
ButteryProgressBar
) avecActionBarActivity
mais ça ne fonctionne pas. Comment puis-je mettre une barre de progression indéterminée en vertu de laActionBar/Toolbar
? C'est la mise en page que je suis en utilisant: stackoverflow.com/a/26440880/1480019ProgressBar
travail? Si cela ne fonctionne pas non plus, cela signifie qu'il ya un problème avec mon code. Mais si ça fonctionne, ce serait un problème avec leButteryProgressBar
et je ne peux pas vous aider là-bas... de toute façon, pouvez-vous me dire quelle ligne lance le de l'erreur? Et est-ce une erreur d'exécution ou d'erreur de compilation? Donnez-nous plus d'infos 🙂ButteryProgressBar
est pas à l'affiche. J'ai débogué toutes les valeurs et est venu à la conclusion quecontentView.getY()
est de retour0
. C'est pourquoi laButteryProgressBar
est pas à l'affiche. J'ai essayé certaines choses avecgetSupportActionBar().getHeight()
et de définir cette valeur àprogressBar.setY
mais alors leButteryProgressBar
apparaît dans le milieu de laActionBar/Toolbar
. Aussi essayé ceci mais ensuite, il apparaît dans le milieu. J'apprécie vraiment toute aide que vous pouvez fournir.getSupportActionBar().getHeight()
fonctionne, vous y êtes presque. LeprogressBar.setY()
fonction définit la position par rapport au haut de l'écran, y compris la barre d'état. Donc, ce que vous avez à faire est desetY(supportActionBarHeight + Math.ceil(25 * context.getResources().getDisplayMetrics().density))
. La barre d'état est 25px élevé (mdpi) et les échelles, avec plus denisities (hdpi/xhdpi/...).Essayez et dites moi si cela fonctionne.Étendre les Activités de la suite de la classe à avoir une Barre en haut(ci-dessous ActionBar) de chaque, et un
getProgressBar()
méthode:Classe Parent:
Mise en page (progress.xml):
android:layout_marginTop="-8dp"
à la ProgressBar afin de simuler "l'ombre" de l'effet. Mais pour que cette méthode, il est probablement plus efficace pour l'ajouter à la page principale elle-même. Mais maintenant, il fonctionne comme prévu. Merci pour le hack.J'ai compilé le code de ce fil ainsi que d'autres threads sur StackOverflow et créé un projet qui peut être utilisé pour mettre en œuvre ButteryProgessbar ainsi que de "tirer vers le bas pour rafraîchir". https://github.com/pauldmps/Gmail-like-Pull-Down-to-Refresh
N'hésitez pas à utiliser le code de votre application.
Un grand merci à vous les gars.
Veuillez utiliser le code ci-dessous. il suffit d'utiliser une style par défaut dans la barre de progression comme
style="?android:attr/progressBarStyleHorizontal"
Bien , j'ai fait quelque chose de similaire pour l'un de mes animaux apps et ne suis pas sûr si c'est le seul moyen ou la meilleure façon de le faire , mais cela fonctionne bien.
Pour commencer , utiliser une superposition de la barre d'action, puis de définir l'arrière-plan dessiné à "null", de sorte que la superposition de la barre d'action est transparent.
Maintenant à vous de l'activité mise en page , définissez la marge du haut pour votre vue de la racine de "actionbar hauteur", Vous pouvez le faire comme ceci.
Or, l'action ne va pas de masquer n'importe quel de votre activité.
La prochaine chose que vous avez à faire maintenant est d'ajouter un en-tête de la vue sur le dessus de votre vue de la racine à la hauteur de même que la barre d'action. Définir une couleur d'arrière-plan pour elle. Ce serait maintenant la couleur de votre barre d'action et depuis la barre d'action s'aligne parfaitement sur le dessus pf cette vue d'en-tête.
Maintenant, vous pouvez facilement mettre une barre de progression dans la vue d'en-tête et d'aligner le bas de l'en-tête de la vue. Pour l'utilisateur, ce serait comme si la barre de progression est sur la barre d'action lui-même , tout comme chrome ..