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 ?
Réponses
Trop de publicités?<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.
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>
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.
- Copie des 8 barres de progression horizontales indéterminées.
- J'ai modifié les dessins en utilisant un manipulateur d'image et en supprimant les bordures inutiles.
- Copie du XML de la drawable nommée progress_indeterminate_horizontal_holo.xml de la plateforme Android.
- Copié le style Widget.ProgressBar.Horizontal et ses parents
- 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" />
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"/>
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" />