Me gustaría redondear las esquinas de una vista y también cambiar el color de la vista según el contenido en tiempo de ejecución.
TextView v = new TextView(context);
v.setText(tagsList.get(i));
if(i%2 == 0){
v.setBackgroundColor(Color.RED);
}else{
v.setBackgroundColor(Color.BLUE);
}
v.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
v.setPadding(twoDP, twoDP, twoDP, twoDP);
v.setBackgroundResource(R.drawable.tags_rounded_corners);
Tenía la esperanza de establecer un dibujo y el color se superpondría, pero no es así. Cualquiera que ejecute en segundo lugar es el fondo resultante.
¿Hay alguna forma de crear esta vista mediante programación, teniendo en cuenta que el color de fondo no se decidirá hasta el tiempo de ejecución?
editar: solo estoy cambiando entre rojo y azul ahora para probar. Posteriormente, el usuario podrá elegir el color.
editar:
tags_unded_corners.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<corners
android:bottomRightRadius="2dp"
android:bottomLeftRadius="2dp"
android:topLeftRadius="2dp"
android:topRightRadius="2dp"/>
</shape>
android
android-layout
background
android-view
rounded-corners
John Moffitt
fuente
fuente
tags_rounded_corners
?Respuestas:
En lugar de
setBackgroundColor
, recupere el fondo dibujable y establezca su color:Además, puede definir el relleno dentro de su
tags_rounded_corners.xml
:fuente
Enfoque programático total para establecer esquinas redondeadas y agregar color de fondo aleatorio a una vista No he probado el código, pero entiendes la idea.
Aquí estamos usando gradiente dibujable para que podamos usarlo
GradientDrawable#setCornerRadius
porqueShapeDrawable
NO proporciona ningún método de este tipo.fuente
PaintDrawable
lugar deGradientDrawable
. Admite esquinas redondeadas y un solo color que parece ser más apropiado que un degradado.var pd = new PaintDrawable(BackgroundColor); pd.SetCornerRadius(15); myView.Background = pd;
Creo que la forma más rápida de hacer esto es:
fuente
Puede lograrlo mejor utilizando DrawableCompat de esta manera:
fuente
Si no está sufriendo un derrame cerebral, puede usar
pero esto también cambiará el color del trazo
fuente
Aquí tienes un ejemplo con una extensión. Esto supone que la vista tiene el mismo ancho y alto.
Necesita usar un oyente de cambio de diseño para obtener el tamaño de la vista. Entonces puedes llamar a esto en una vista como esta
myView.setRoundedBackground(Color.WHITE)
fuente
Puede cambiar dinámicamente el color de cualquier elemento (diseño, vista de texto). Pruebe el siguiente código para establecer el color mediante programación en el diseño
en el archivo activity.java
crear layout_round.xml en la carpeta dibujable
diseño en el archivo activity.xml
fuente
Copiando el comentario de @ cimlman en una respuesta de nivel superior para una mayor visibilidad:
Para su información:
ShapeDrawable
(y su subtipoPaintDrawable
) utiliza el ancho y alto intrínsecos predeterminados de 0. Si el elemento de diseño no aparece en su caso de uso, es posible que deba establecer las dimensiones manualmente:-1
es una constante mágica que indica que un Drawable no tiene un ancho y alto intrínsecos propios ( Fuente ).fuente