144 votes

Suppression du rembourrage vertical de la barre d'avancement horizontale

Par défaut, la barre de progression présente un certain remplissage au-dessus et au-dessous de la barre elle-même. Existe-t-il un moyen de supprimer ce rembourrage afin de n'avoir que la barre à la fin ?

18voto

Abdur Rehman Points 9
<com.google.android.material.progressindicator.LinearProgressIndicator
    android:id="@+id/progress_loading"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:visibility="visible"
    android:indeterminate="true"
    app:indicatorColor="@color/colorAccent"
    app:layout_constraintTop_toBottomOf="@+id/app_bar_pdfview"/>

J'utilise cette nouvelle barre de progression en utilisant ceci

implementation 'com.google.android.material:material:1.3.0'
  • trackThickness : l'épaisseur de l'indicateur et de la piste.
  • indicatorColor : la ou les couleurs de l'indicateur.
  • trackColor : la couleur de la piste.
  • trackCornerRadius : le rayon du coin arrondi de l'indicateur et de la piste.
  • indeterminateAnimationType : le type d'animation indéterminée.
  • indicatorDirectionLinear : la direction de balayage de l'indicateur.

see result of this horizontal progress bar

15voto

Juozas Kontvainis Points 3294

Il est possible de dessiner une ProgressBar centrée verticalement à l'intérieur d'un parent qui enlèverait le padding. Puisque la ProgressBar ne peut pas se dessiner plus grande que le parent, nous devons créer un grand parent à placer dans une vue d'écrêtage.

<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="16dp"
        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>

14voto

Subin Sebastian Points 2387

Une solution complète à ce problème serait la suivante. Juste au cas où quelqu'un aurait besoin de fragments de code, voici ce que j'ai fait.

  1. Copie des 8 barres de progression horizontales indéterminées.
  2. J'ai modifié les dessins en utilisant un manipulateur d'image et en supprimant les bordures inutiles.
  3. Copie du XML de la drawable nommée progress_indeterminate_horizontal_holo.xml de la plateforme Android.
  4. Copié le style Widget.ProgressBar.Horizontal et ses parents
  5. Définissez manuellement le style et la hauteur minimale dans la mise en page.

Voici le fichier 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" />
</animation-list>

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

<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 enfin, je fixe la hauteur minimale à 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" />

9voto

emotionfxxk Points 209

J'ai rencontré le même problème en utilisant la barre de progression avec le style Horizontal.

La cause fondamentale est que le dessinateur par défaut de la barre de progression (9-patch) : (progress_bg_holo_dark.9.png) a quelques pixels transparents verticaux comme rembourrage.

La dernière solution qui a fonctionné pour moi : personnaliser le tableau de progression, mon exemple de code est le suivant :

barre_de_progression_horizontale_personnalisée_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>

de la 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"/>

8voto

chinmay.d Points 117

Une astuce consiste à ajouter des marges négatives à votre barre de progression.

Vous trouverez ci-dessous un exemple du code XML, en supposant qu'il soit en haut de votre écran :

<ProgressBar
    android:id="@+id/progressBar"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="-7dp"
    android:layout_marginBottom="-7dp"
    android:indeterminate="true" />

result of code

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