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 ?

75voto

Stephen Points 191

J'utilise ce qui suit comme solution de rechange pour ce problème.

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

60voto

penduDev Points 80

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

hauteur de mon ProgressBar est 4dp. J'ai donc créé un FrameLayout avec une hauteur de 4dp et de mettre le layout_gravity de ProgressBar a center . Ça marche comme sur des roulettes.

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

Note : Quelle FrameLayout fait est qu'il enlève tout ce qui est en excès, donc si vous faites face au problème où la ProgressBar est encore mince, il suffit de définir le layout_height de la ProgressBar à un grand nombre comme 100dp . Il couvrira entièrement le FrameLayout et ne montrera que 4dp d'elle.

38voto

Binoy Babu Points 3258

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 sur les différents appareils.

MaterialProgressBar

  • Apparition cohérente sur Android 4.0+.
  • Teinte correcte sur toutes les plateformes.
  • Capable de supprimer le rembourrage intrinsèque du cadre ProgressBar.
  • Possibilité de masquer la piste de la barre de progression horizontale du cadre.
  • Utilisé pour remplacer le cadre ProgressBar.

A ajouter comme dépendance de gradle :

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

Pour ajouter une barre de progression 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, voir le Page GitHub .

38voto

Ali_Waris Points 405

Si quelqu'un a encore besoin d'aide, il peut essayer ceci :

<androidx.core.widget.ContentLoadingProgressBar
    android:id="@+id/progress"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="@+id/guideline"
    android:indeterminate="true"
    android:visibility="visible"
    app:layout_constraintBottom_toTopOf="@+id/guideline" />

Ici, la barre de progression se trouve à l'intérieur du ConstraintLayout et le Contrainte de sommet à sommet et Contrainte de bas à haut doivent être appliqués au même élément (dans ce cas, il s'agit d'une ligne directrice).

*** LA SOLUTION COMPLÈTE.

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="48dp">

    <View
        android:id="@+id/guideline"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="vertical"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <ProgressBar
        android:id="@+id/progress_bar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:indeterminate="true"
        app:layout_constraintBottom_toTopOf="@+id/guideline"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline" />
</androidx.constraintlayout.widget.ConstraintLayout>

19voto

Phan Van Linh Points 16963

Pour supprimer le rembourrage vertial de ProgressBar vous pouvez le faire en

  • fixer la hauteur de ProgressBar
  • Utiliser scaleY="value" (value = height/4) (4 est la hauteur par défaut de la barre de progression)

L'exemple contient 1 wrap_content ProgressBar , 1 8dp ProgressBar , 1 100dp ProgressBar

enter image description here

<ProgressBar
    style="?android:attr/progressBarStyleHorizontal"
    ...
    android:layout_height="8dp"
    android:scaleY="2" />

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