Quitar el relleno en la barra de progreso horizontal

En nuestra aplicación necesitamos una barra de progreso indeterminada, así:

Barra de progreso cómo debe ser

Podemos lograr esto estableciendo un margen negativo en el ProgressBar, así:

<ProgressBar android:id="@+id/progressbar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:indeterminate="true" android:marginTop="-7dp" android:visibility="@{loading ? View.VISIBLE : View.GONE}" /> 

PERO porque ConstraintLayout no soporta márgenes negativos, se verá así:

Barra de progreso con relleno

OK, el margen negativo fue un hack. Vamos a reemplazarlo con un hack diferente, żverdad? Vamos a presentar nuestra vista personalizada CustomProgressBar , que extiende ProgressBar y reemplaza su método onDraw , como esto:

 @Override protected void onDraw(Canvas canvas) { int marginTop = dpToPx(7); canvas.translate(0, -marginTop); super.onDraw(canvas); } 

Pero todo esto huele mal. Tiene que haber una mejor solución! ¿Qué recomendarías?

Otra forma de hacerlo es utilizar una guía y centralizar ProgressBar entre la parte superior de los padres y la guía.

 <ProgressBar android:id="@+id/progressBar2" style="?android:attr/progressBarStyleHorizontal" android:layout_width="0dp" android:paddingTop="-4dp" android:layout_height="wrap_content" app:layout_constraintRight_toRightOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintBottom_toTopOf="@+id/guideline" app:layout_constraintTop_toTopOf="parent" /> <android.support.constraint.Guideline android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/guideline" android:orientation="horizontal" app:layout_constraintGuide_begin="4dp" /> 

Me encontré con el mismo problema también. Y como usted dijo, me encuentro con numerosas soluciones que parecen un hack que podría romper algo más abajo de la línea. Dicho esto, me encontré con una solución que es utilizar esta biblioteca en lugar de barra de progreso.

Una cosa a tener en cuenta es, le dice que para integrarla agregando:

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

Sin embargo, cuando usé esto, me dio un error de una biblioteca de soporte de Android para la barra de acción flotante. Así que te recomendamos que utilices esto en su lugar:

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

Un fragmento de código de ejemplo sobre cómo lo usé:

 <me.zhanghai.android.materialprogressbar.MaterialProgressBar android:id="@+id/reviewProgressBar" style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="6dp" android:layout_below="@+id/my_toolbar" android:indeterminate="false" app:mpb_progressStyle="horizontal" app:mpb_useIntrinsicPadding="false"/> 

¡Espero que esto ayude!

  • ¿Cómo hacer referencia a un dibujable de un proyecto de biblioteca en el diseño de un proyecto principal en android?
  • ¿Cómo hacer que el diseño con View llene el espacio restante?
  • Disposición de Android por debajo y por encima
  • Optimizar el diseño complejo
  • Cómo agregar iconos adyacentes a los títulos de Android Navigation Drawer
  • Cambiar el color de texto de un solo ClickableSpan cuando se presiona sin afectar a otros ClickableSpans en el mismo TextView
  • Android: falló al establecerContentView al cambiar a ListActivity
  • Diseño que no muestra contenido cuando se carga a través de una nueva actividad en Xamarin
  • Cambiar el color de fondo del elemento seleccionado en el cajón de navegación
  • Error: No se encontró ningún identificador de recurso para el atributo 'groupindicator' en el paquete 'android'
  • Mobile Vision barcodeScanner: ¿Por qué SurfaceView no actualiza CameraSource?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.