Red de conocimiento informático - Computadora portátil - Cómo mostrar el estilo de fondo inferior en Android CardView

Cómo mostrar el estilo de fondo inferior en Android CardView

El método de escritura anterior se utiliza generalmente para implementar estilos de botones.

Pregunta 1:

Si lo coloca como un botón de clic en la parte inferior del cuadro de diálogo, el fondo del cuadro de diálogo se establecerá en esquinas redondeadas, pero las esquinas de el botón mostrado seguirá teniendo ángulos rectos.

Problema 2:

En este punto, el cuadro de diálogo cambia el color de fondo, mientras que el área de vista de la tarjeta permanece blanca.

Por supuesto, para la pregunta 1, puedes cambiar la vista de la tarjeta y configurar manualmente una sección con esquinas redondeadas.

Solución: Cambie el fondo predeterminado a transparente, lo que mostrará el estilo del fondo inferior del cuadro de diálogo.

Puedes ver la configuración app:cardBackgroundColor="@color/transparent" .

El problema es que el método anterior solo establece el color, ¿qué pasa si quieres establecer un fondo dibujable?

La solución es simple: CardView hereda de FrameLayout, lo que significa que puede envolver contenido alrededor de otros controles como ImageView. Los controles ajustados se pueden utilizar para implementar fondos dibujables.

Entonces la pregunta es, dado que CardView hereda de FrameLayout, esto significa que puede establecer el fondo. Pero ¿por qué no se muestra después de configurarlo?

Esto está relacionado con todo el proceso de construcción de la Vista:

La inicialización de la Vista en el método constructor llama al método IMPL.initialize. ¿Qué es IMPL?

IMPL es la clase de implementación de CardView y diferentes versiones tienen diferentes implementaciones. Visite CardViewApi21Impl para ver la implementación de la inicialización.

Como se puede ver desde aquí, llamamos cardView.setCardBackground y generamos un fondo basado en la configuración

Assignment RoundRectDrawable.

cardView.setCardBackground(background); CardView es CardViewDelegate, que es una interfaz, por lo que también puede ver su clase de implementación. Puedes encontrarlo en la clase CardView:

Y el setBackgroundDrawable de arriba pertenece a la capa Ver.

Es obvio en este punto que, dado que se llama a inicialización después del método constructor de la clase principal (FrameLayout), el setBackgroundDrawable final siempre anulará la implementación de este método por parte de la clase principal.

En definitiva, se trata de una cuestión de cobertura continua.