Par défaut, la barre de progression a un certain remplissage au-dessus et au-dessous de la barre elle-même. Existe-t-il un moyen de supprimer ce rembourrage pour ne plus avoir que la barre à la fin?
J’utilise les éléments suivants comme solution de contournement pour ce problème.
android:layout_marginBottom="-8dp" android:layout_marginTop="-4dp"
Voici comment j’ai utilisé la réponse de Juozas:
la hauteur de mon ProgressBar
est de 4dp. J’ai donc créé un FrameLayout
de hauteur 4dp et défini le layout_gravity
de ProgressBar
au center
. Cela fonctionne comme un charme.
J’ai fini par utiliser une bibliothèque personnalisée pour résoudre ce problème. La plupart des autres solutions fonctionnent, mais les résultats ne sont pas cohérents d’un appareil à l’autre.
MaterialProgressBar
- Apparence cohérente sur Android 4.0+.
- Teinte correcte sur les plates-formes.
- Capable de supprimer le remplissage insortingnsèque du framework ProgressBar.
- Capable de cacher la piste du framework horizontal ProgressBar.
- Utilisé comme substitut pour framework ProgressBar.
Ajouter en tant que dépendance progressive:
comstack 'me.zhanghai.android.materialprogressbar:library:1.1.7'
Pour append un ProgressBar sans remplissage insortingnsèque à votre mise en page:
app:mpb_useInsortingnsicPadding="false"
fait l’affaire. Pour plus de détails, voir la page GitHub .
Une solution complète à ce problème serait la suivante. Juste au cas où quelqu’un aurait besoin de fragments de code, c’est ce que j’ai fait.
Voici le progress_indeterminate_horizontal_holo.xml
Ressources de style copiées dans mon fichier de styles local.
Et enfin, définissez la hauteur minimale sur 4dp dans mon fichier de disposition local.
Il est possible de dessiner un ProgressBar centré verticalement à l’intérieur d’un parent qui détacherait le remplissage. Puisque ProgressBar ne peut pas se dessiner plus grand que parent, nous devons créer un grand parent à placer dans une vue de détourage.
J’ai rencontré le même problème en utilisant la barre de progression avec le style horizontal.
La cause première est que la barre de progression par défaut de 9 patchs (progress_bg_holo_dark.9.png) contient des pixels transparents verticaux comme remplissage.
La solution finale qui a fonctionné pour moi: personnalisez l’état d’avancement, mon exemple de code comme suit:
custom_horizontal_progressbar_drawable.xml
-
-
-
extrait de mise en page:
La réponse de Subin semble être la seule (actuellement) qui n’est pas un hack fragile susceptible de se casser dans les futures versions d’Android ProgressBar.
Mais plutôt que de passer par la difficulté de décomposer les ressources, de les modifier et de les conserver indéfiniment, j’ai choisi d’utiliser la bibliothèque MaterialProgressBar , qui fait cela pour nous:
Dans build.gradle:
// Android horizontal ProgressBar doesn't allow removal of top/bottom padding comstack 'me.zhanghai.android.materialprogressbar:library:1.1.6'
Ce projet a une belle démo qui montre les différences entre celui-ci et le ProgressBar intégré.
J’utilise minHeight et maxHeigh. Cela aide pour différentes versions d’Api.
Il faut utiliser les deux. Api 23 fonctionne bien avec
android:layout_height="wrap_content" android:minHeight="0dp"
Dans ce cas, les versions inférieures d’Api augmentent la hauteur de la barre de progression à maxHeight.
l’ajout de l’android: progressDrawable à une liste de calques définie dans drawable a résolu le problème pour moi. Il fonctionne en masquant la barre de progression dans un dessin personnalisé
exemple de mise en œuvre décrit à l’ adresse https://stackoverflow.com/a/4454450/1145905
J’utilise style="@style/Widget.AppCompat.ProgressBar.Horizontal"
et il était assez facile de se débarrasser des marges. Ce style est:
- @drawable/progress_horizontal_material
- @drawable/progress_indeterminate_horizontal_material
- 16dip
- 16dip
Je viens de remplacer la hauteur min / max:
Essayez ce qui suit:
… puis configurez la barre de progression selon vos besoins, car elle affichera initialement une barre de taille moyenne avec une teinte de progression de couleur jaune avec une teinte de fond de progression grisâtre. Notez également qu’il n’y a pas de remplissage vertical.
Essayez simplement les lignes de code ci-dessous dans votre XML de mise en page.
Une solution simple, sans astuces, compatible avec toutes les versions d’Android et ne nécessitant pas de bibliothèques externes, est en LinearLayout
ProgressBar
avec deux Views
dans LinearLayout
. C’est ce que j’ai fini avec. Semble très soignée et cette approche est assez flexible – vous pouvez l’animer de manière funky, append du texte, etc.
Disposition:
Code:
public void setProgressValue(float percentage) { TextView progressValue = (TextView) findViewById(R.id.inventory_progress_value); TextView progressRemaining = (TextView) findViewById(R.id.inventory_progress_remaining); LinearLayout.LayoutParams paramsValue = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); LinearLayout.LayoutParams paramsRemaining = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); paramsValue.weight = (100 - percentage); paramsRemaining.weight = percentage; progressValue.setLayoutParams(paramsValue); progressRemaining.setLayoutParams(paramsRemaining); }
Résultat (avec une certaine élévation ajoutée):