Supprimer le rembourrage vertical de l'horizontal ProgressBar

Par défaut, ProgressBar possède un certain rembourrage au-dessus et au-dessous de la barre elle-même. Existe-t-il un moyen de supprimer ce rembourrage afin de ne pas avoir la barre à la fin?

  • Qu'est-ce que SecDownloader
  • Android ExoPlayer onProgressChanged
  • Fermer l'application lorsque vous appuyez sur le bouton arrière sur Android
  • Portrait pour téléphone, paysage pour tablette (Android-Layout)
  • Disposition Android: Comment implémenter une interface utilisateur similaire au jeu de cartes?
  • Android à l'aide d'Analytics Firebase avec Google Analytics
  • Android: Samsung Galaxy Tabs et Android 2.2 Devices Affichage de la date GPS 1 jour avant le 1er jan 2012
  • Comment ajouter un bouton aux notifications dans Android?
  • Android, qu'est-ce que l'attribut clipToPadding fait?
  • Comment puis-je récupérer le compte Google enregistré sur les téléphones Android?
  • Emulateur Android: cette application ne fonctionnera pas sans les services Google Play
  • Obtenir une liste des fournisseurs de contenu disponibles
  • 11 Solutions collect form web for “Supprimer le rembourrage vertical de l'horizontal ProgressBar”

    J'utilise les éléments suivants comme solution de rechange pour ce problème.

     android:layout_marginBottom="-8dp" android:layout_marginTop="-4dp" 

    C'est ainsi que j'ai utilisé la réponse de Juozas:

    La hauteur de mon ProgressBar est 4dp. J'ai donc créé un FrameLayout avec la hauteur 4dp et j'ai configuré le layout_gravity de ProgressBar au center . C'est comme un charme.

     <FrameLayout android:layout_width="match_parent" android:layout_height="4dp"> <ProgressBar style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="4dp" android:layout_gravity="center" android:indeterminate="true"/> </FrameLayout> 

    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 dans divers appareils.

    MaterialProgressBar

    • Apparence cohérente sur Android 4.0+.
    • Coloration correcte sur les plates-formes.
    • Capable de supprimer le rembourrage intrinsèque du cadre ProgressBar.
    • Capable de cacher la piste de la structure horizontal ProgressBar.
    • Utilisé comme un remplacement déroulant pour Framework ProgressBar.

    Pour ajouter en tant que dépendance de gradle:

     compile 'me.zhanghai.android.materialprogressbar:library:1.1.7' 

    Pour ajouter un ProgressBar sans rembourrage intrinsèque à votre mise en page:

     <me.zhanghai.android.materialprogressbar.MaterialProgressBar android:layout_width="wrap_content" android:layout_height="4dp" android:indeterminate="true" app:mpb_progressStyle="horizontal" app:mpb_useIntrinsicPadding="false" style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal" /> 

    app:mpb_useIntrinsicPadding="false" fait l'affaire. Pour plus de détails, consultez 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 drawtables de la barre de progression horizontale indéterminée
    2. Modifié les drawables à l'aide d'un manipulateur d'image et supprimer des rembourrages inutiles
    3. Copié le XML drawable nommé progress_indeterminate_horizontal_holo.xml depuis la plate-forme Android
    4. Copié le style Widget.ProgressBar.Horizontal et ses parents
    5. Définissez le style et min_height manuellement dans la mise en page

    Voici progress_indeterminate_horizontal_holo.xml

     <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/progressbar_indeterminate_holo1" android:duration="50" /> <item android:drawable="@drawable/progressbar_indeterminate_holo2" android:duration="50" /> <item android:drawable="@drawable/progressbar_indeterminate_holo3" android:duration="50" /> <item android:drawable="@drawable/progressbar_indeterminate_holo4" android:duration="50" /> <item android:drawable="@drawable/progressbar_indeterminate_holo5" android:duration="50" /> <item android:drawable="@drawable/progressbar_indeterminate_holo6" android:duration="50" /> <item android:drawable="@drawable/progressbar_indeterminate_holo7" android:duration="50" /> <item android:drawable="@drawable/progressbar_indeterminate_holo8" android:duration="50" /> 

    Ressources de style copiées dans mon fichier de styles locaux.

     <style name="Widget"> <item name="android:textAppearance">@android:attr/textAppearance</item> </style> <style name="Widget.ProgressBar"> <item name="android:indeterminateOnly">true</item> <item name="android:indeterminateBehavior">repeat</item> <item name="android:indeterminateDuration">3500</item> </style> <style name="Widget.ProgressBar.Horizontal"> <item name="android:indeterminateOnly">false</item> <item name="android:indeterminateDrawable">@drawable/progress_indeterminate_horizontal_holo</item> </style> 

    Et finalement, définissez une hauteur minime à 4dp dans mon fichier de mise en page local.

     <ProgressBar android:id="@+id/pb_loading" style="@style/Widget.ProgressBar.Horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:indeterminate="true" android:minHeight="4dp" android:minWidth="48dp" android:progressDrawable="@drawable/progress_indeterminate_horizontal_holo" /> 

    Il est possible de dessiner ProgressBar verticalement centrée à l'intérieur d'un parent qui retient le rembourrage. Puisque ProgressBar ne peut pas se dessiner plus grand que le parent, il faut créer un grand parent à placer dans une vue découpée.

     <FrameLayout android:id="@+id/clippedProgressBar" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="4dp" tools:ignore="UselessParent"> <FrameLayout android:layout_width="match_parent" android:layout_height="48dp" android:layout_gravity="center_vertical"> <ProgressBar style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:indeterminate="true"/> </FrameLayout> </FrameLayout> 

    La réponse de Subin semble être la seule (actuellement) qui n'est pas un hack fragile susceptible de se briser dans les versions futures de Android ProgressBar.

    Mais plutôt que de passer la peine de sortir les ressources, de les modifier et de les conserver indéfiniment, j'ai choisi d'utiliser la bibliothèque MaterialProgressBar , ce qui fait cela pour nous:

     <me.zhanghai.android.materialprogressbar.MaterialProgressBar android:layout_width="match_parent" android:layout_height="wrap_content" android:indeterminate="true" android:layout_gravity="bottom" custom:mpb_progressStyle="horizontal" custom:mpb_showTrack="false" custom:mpb_useIntrinsicPadding="false" style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal.NoPadding" /> 

    Dans build.gradle:

     // Android horizontal ProgressBar doesn't allow removal of top/bottom padding compile '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'ai rencontré le même problème lors de l'utilisation de la barre de progression avec le style Horizontal.

    La cause racine est que le patch 9 par défaut amorti pour la barre de progression: (progress_bg_holo_dark.9.png) comporte des pixels transparents verticaux en tant que rembourrage.

    La solution finale qui a fonctionné pour moi: personnaliser les progrès réalisables, mon exemple de code comme suit:

    Custom_horizontal_progressbar_drawable.xml

     <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape android:shape="rectangle"> <solid android:color="#33ffffff" /> </shape> </item> <item android:id="@android:id/secondaryProgress"> <clip> <shape android:shape="rectangle"> <solid android:color="#ff9800" /> </shape> </clip> </item> <item android:id="@android:id/progress"> <clip> <shape android:shape="rectangle"> <solid android:color="#E91E63" /> </shape> </clip> </item> </layer-list> 

    Extrait de mise en page:

     <ProgressBar android:id="@+id/song_progress_normal" style="@style/Widget.AppCompat.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="5dp" android:layout_alignParentBottom="true" android:progressDrawable="@drawable/custom_horizontal_progressbar_drawable" android:progress="0"/> 

    J'utilise minHeight et maxHeigh. Il aide les différentes versions d'Api.

     <ProgressBar android:id="@+id/progress_bar" style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxHeight="3dp" android:minHeight="3dp" /> 

    Il faut utiliser les deux. Api 23 fonctionne bien avec

     android:layout_height="wrap_content" android:minHeight="0dp" 

    Mais les versions Api inférieures augmentent la hauteur de la barre de progression jusqu'à MaxHeight dans ce cas.

    Ajoutant l'android: progressDrawable à une liste de couches définie dans drawable m'a arrangé le problème. Il fonctionne en masquant la barre des progess dans un design personnalisable

    Exemple d'implémentation décrite à 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:

      <item name="progressDrawable">@drawable/progress_horizontal_material</item> <item name="indeterminateDrawable">@drawable/progress_indeterminate_horizontal_material</item> <item name="minHeight">16dip</item> <item name="maxHeight">16dip</item> 

    Je dépassais la hauteur min / max:

      <ProgressBar style="@style/Widget.AppCompat.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="2dp" android:indeterminate="true" android:minHeight="2dp" android:maxHeight="2dp" /> 

    Essayez ce qui suit:

     <ProgressBar android:id="@+id/progress_bar" style="@android:style/Widget.ProgressBar.Horizontal" android:progress="25" android:progressTint="@color/colorWhite" android:progressBackgroundTint="@color/colorPrimaryLight" android:layout_width="match_parent" android:layout_height="4dp" /> 

    … puis configurez la barre de progression à vos besoins, puisqu'il 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 rembourrage vertical.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.