Quitar el relleno en la barra de progreso horizontal
En nuestra aplicación necesitamos una barra de progreso indeterminada, así:
- Pequeño ProgressDialog "spinner" para android
- GridView y el exceso de espacio de relleno
- Hacer una pantalla completa en sólo la disposición-tierra de Android cuando se reproduce videoView
- No se pudo expandir RemoteViews para: StatusBarNotification
- Android: muestra un cuadro de diálogo emergente cuando se hace clic en una palabra concreta de TextView
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í:
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?
- Disposiciones condicionales de Android para teléfonos: tabletas
- Android incluye diseño debajo del elemento
- Cómo cambiar fontFamily de TextView en Android
- Hacer una ImageView dentro de mi PagerAdapter ir a pantalla completa - ¿Cómo?
- Pellizcar zoom con ScrollView: Actualizar su comportamiento de desplazamiento cuando cambia el tamaño de un niño
- Cambiar el color de texto de un solo ClickableSpan cuando se presiona sin afectar a otros ClickableSpans en el mismo TextView
- Android - técnicas comunes para escalar diseños de pantalla
- Estilo de la casilla de verificación de Android
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!
- Android cómo descargar un archivo de imagen de 1MB y establecer a ImageView
- Se pierde la aplicación Android de SyncAdapter