86 votes

Comment définir la hauteur de la barre de progression d'Android ?

Mon activity_main.xml est en dessous, comme vous le voyez, la hauteur est de s

Et dans MyEclipse, cela ressemble à ce qui suit :

enter image description here

Mais lorsque je l'exécute sur mon téléphone, il ressemble à ce qui suit :

enter image description here

Ma question est donc de savoir pourquoi la hauteur réelle de la barre de progression n'est pas celle que j'ai définie ? Comment augmenter la hauteur de la barre de progression ?

215voto

Martin Pfeffer Points 85

Je suppose que la solution la plus simple serait :

mProgressBar.setScaleY(3f);

82voto

Maksim Kniazev Points 2097

Android:scaleY="8" dans votre fichier xml

47voto

MarvinLabs Points 13401

En ce tutoriel :

<style name="CustomProgressBarHorizontal" parent="android:Widget.ProgressBar.Horizontal">
      <item name="android:progressDrawable">@drawable/custom_progress_bar_horizontal</item>
      <item name="android:minHeight">10dip</item>
      <item name="android:maxHeight">20dip</item>
</style>

Il suffit ensuite d'appliquer le style à vos barres de progression ou mieux Dans le cas de la barre de progression, vous pouvez remplacer le style par défaut de votre thème pour donner un style automatique à toutes les barres de progression de votre application.

La différence que vous voyez dans les captures d'écran est due au fait que les téléphones/émulateurs utilisent une version différente d'Android (le dernier est le thème d'ICS (Holo), le premier est le thème original).

21voto

Piraba Points 1351

Utilisez cette

style="@android:style/Widget.ProgressBar.Horizontal"

14voto

tir38 Points 387

Comme mentionné dans d'autres réponses, il semble que vous définissiez le style de votre barre de progression pour utiliser Holo.Light :

style="@android:style/Widget.Holo.Light.ProgressBar.Horizontal"

Si cela fonctionne sur votre téléphone, il s'agit probablement d'un appareil 3.0+. Cependant, votre émulateur semble utiliser une barre de progression "par défaut".

style="@android:style/Widget.ProgressBar.Horizontal"

Peut-être avez-vous changé le style de la barre de progression "par défaut" entre la création des captures d'écran ? Malheureusement, les appareils 2.x ne reviennent pas automatiquement à la barre de progression "par défaut" si vos projets utilisent une barre de progression Holo.Light. Il y aura simplement un crash.

Si vous utilisez vraiment la barre de progression par défaut, le réglage de la hauteur max/min comme suggéré fonctionnera bien. Cependant, si vous utilisez la barre Holo.Light (ou Holo), le réglage de la hauteur max/min ne fonctionnera pas. Voici un exemple de résultat obtenu en fixant la hauteur max/min à 25 et 100 dip :

max/min réglé sur 25 dip : 25 dip height progress bar

max/min réglé sur 100 dip : 100 dip height progress bar

Vous pouvez voir que le tableau sous-jacent (progress_primary_holo_light.9.png) n'est pas mis à l'échelle comme prévu. La raison en est que la bordure de 9 patchs ne met à l'échelle que les quelques pixels du haut et du bas :

9-patch

La zone horizontale délimitée par la bordure noire d'un pixel (flèches vertes) est la partie qui est étirée lorsque Android doit redimensionner le fichier .png verticalement. La zone située entre les deux flèches rouges ne sera pas étirée verticalement.

La meilleure solution pour résoudre ce problème est de modifier les 9 patchs .png pour étirer la barre et non la "zone de toile", puis de créer un xml de barre de progression personnalisé pour utiliser ces 9 patchs. Cette solution est décrite ici : https://stackoverflow.com/a/18832349

Voici mon implémentation pour une barre de progression Holo.Light non indéterminée. Vous devrez ajouter vos propres 9-patches pour les barres de progression indéterminées et Holo. Idéalement, j'aurais dû supprimer entièrement la zone de toile. Au lieu de cela, je l'ai laissé mais j'ai rendu la zone de la "barre" extensible. https://github.com/tir38/ScalingHoloProgressBar

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X