Supprimer le remplissage vertical de la barre de progression horizontale

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.

  1. Copié tous les 8 tirables horizontaux indéterminés de barre de progression
  2. Edité les tirables en utilisant un manipulateur d’image et en supprimant les rembourrages inutiles
  3. Copié le fichier XML extractible nommé progress_indeterminate_horizontal_holo.xml de la plateforme Android
  4. Copié le style Widget.ProgressBar.Horizontal et ses parents
  5. Définir le style et min_height manuellement dans la mise en page

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.

  

entrer la description de l'image ici

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):

entrer la description de l'image ici