Cómo establecer el color de fondo de una vista


179

Estoy tratando de establecer el color de fondo de una Vista (en este caso, un Botón).

Yo uso este código:

// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

Hace que el botón desaparezca de la pantalla. ¿Qué estoy haciendo mal y cuál es la forma correcta de cambiar el color de fondo en cualquier vista?

Gracias.


1
Eso se ve correcto. De hecho, no creo que necesite llamar a invalidate (). Cuando dice que el botón desaparece, ¿quiere decir que literalmente o quiere decir que el botón tenía texto o una imagen que desaparece?
RickNotFred

Respuestas:


281

Hiciste tu botón transparente. El primer byte es el alfa.

Tratar v.setBackgroundColor(0xFF00FF00);


2
La respuesta de EddieB a continuación es mucho mejor ya que esto elimina cualquier borde, etc., como el subrayado de EditText
Molten Ice

@aroth es mejor Color.Green? Si quiero color complext con argb? ... su respuesta está en desuso
entrega el

2
@delive - ¿Ven de nuevo? Color.GREEN no está en desuso e incluye el byte alfa. Su valor es 0xff00ff00, exactamente el mismo que lo sugerido en la respuesta, excepto que también tiene el beneficio de ser legible para los humanos . La mayoría de los desarrolladores preferirían una solución legible para humanos.
Aroth

145

Cuando llama a setBackgoundColor, sobrescribe / elimina cualquier recurso de fondo existente, incluidos los bordes, esquinas, relleno, etc. Lo que desea hacer es cambiar el color del recurso de fondo existente ...

View v;
v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN);

Experimente con PorterDuff.Mode. * Para obtener diferentes efectos.


"sobrescribe / elimina cualquier recurso de fondo existente", en realidad no.
Yousha Aleayoub

2
Tuve que usar lo anterior junto con v.invalidate (); en la proxima linea.
Hashim Akhtar

1
probé este tiempo perdido y seguí con la respuesta aceptada, v.getBackground () dio una excepción de puntero nulo y se bloqueó.
Siddarth G

Esto más PorterDuff.Mode.SRC_IN me resolvió para que no perdiera mi borde de fondo.
Guilherme Carvalho

123

Varias opciones para hacer esto ...

Establecer fondo en verde:

v.setBackgroundColor(0x00FF00);

Establezca el fondo en verde con Alpha :

v.setBackgroundColor(0xFF00FF00);

Establezca el fondo en verde con Color.GREEN constante:

v.setBackgroundColor(Color.GREEN);

Establezca el fondo en verde definiendo en Colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>     
    <color name="myGreen">#00FF00</color> 
    <color name="myGreenWithAlpha">#FF00FF00</color> 
</resources>

y usando:

v.setBackgroundResource(R.color.myGreen);

y:

v.setBackgroundResource(R.color.myGreenWithAlpha);

o el más largo sin aliento:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreen));

y:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreenWithAlpha));

getResources().getColor(...)consiguió obsoleto stackoverflow.com/questions/31842983/…
Junior Mayhé

55
También hay: v.setBackgroundResource(R.color.myGreen);cuando se usacolors.xml
sombrío

Eliminó las invalidatellamadas, como puede ver, los setBackground... métodos ya lo llaman.
weston

v.setBackgroundColor(0x00FF00);es solo su código que dicen que no funciona. También esperaría que fuera transparente.
Weston

35

Puede establecer el color hexadecimal en cualquier recurso con:

View.setBackgroundColor(Color.parseColor("#e7eecc"));

16
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

El código no establece el botón en verde. En cambio, hace que el botón sea totalmente invisible.

Explicación: el valor hexadecimal del color es incorrecto. Con un valor Alfa de cero, el color será invisible.

El valor hexadecimal correcto es 0xFF00FF00para el verde de opacidad total. Cualquier valor alfa entre 00 y FF causaría transparencia.


12

¿Cuál es la forma correcta de cambiar el color de fondo en cualquier vista?

En cualquier View ? Lo que tienes es correcto, aunque debes soltar elinvalidate() llamada.

Sin embargo, algunos Viewsya tienen antecedentes. A Button, por ejemplo, ya tiene un fondo: la cara del botón en sí. Este fondo es un StateListDrawable, que puedes encontrar enandroid-2.1/data/res/drawable/btn_default.xml en su instalación de Android SDK. Eso, a su vez, se refiere a un montón de imágenes de mapa de bits de nueve parches, disponibles en múltiples densidades. Tendría que clonar y modificar todo eso para lograr sus objetivos ecológicos.

En resumen, será mejor que encuentre otro patrón de IU en lugar de intentar cambiar el fondo de a Button.


OK, gracias por la explicación sobre los fondos de los botones. Nueve mapas de bits de parches ( developer.android.com/reference/android/graphics/NinePatch.html ) eran nuevos para mí. Simplemente quiero cambiar el color de cualquier cosa en la pantalla cuando presiono un botón. Los botones están en un TextView. Intentar cambiar el color de eso, lleva a los mensajes de la consola "DDM dispatch reg wait timeout ... ActivityManager: No se puede enviar el fragmento DDM 52454151: no hay un controlador definido" y un diálogo en la pantalla "la aplicación se detuvo inesperadamente". Supongo que necesito leer más sobre la interfaz de usuario. Cualquier pista de bienvenida. Gracias.
Peter vdL

12

Para configurar el primer color que se verá en la pantalla, también puede hacerlo en el layout.xml relevante (mejor diseño) agregando esta propiedad a la Vista relevante:

android:background="#FF00FF00"

La pregunta deja en claro que el cambio de color debe ser dinámico.
Peter vdL


6

Yo uso en API min 16, objetivo 23

Button WeekDoneButton = (Button) viewWeeklyTimetable.findViewById(R.id.week_done_button);

WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));

Por lo general, no hay muchos colores predeterminados. Se pueden definir nuevos colores en res / values ​​/ colors como se describe aquí developer.android.com/samples/BasicMediaRouter/res/values/…
Krystian



4

Esta pregunta habla sobre cambiar el color de fondo de una vista. En una de las respuestas, la persona explica cómo cambiar el color de fondo durante el tiempo de ejecución. Obviamente, verá cómo modificar otros objetos en la pantalla, pero esto debería darle un buen comienzo al permitirle al menos modificar el color de fondo de la vista al hacer clic en el botón.


3

Estableciendo con Android 6 use ContextCompact

        view.setBackgroundColor( ContextCompat.getColor(this, R.color.your_color));


2

En kotlin podrías hacerlo así:

val backgroundColor = R.color.whatever_color_you_like
view.setBackgroundColor(getColorCompat(backgroundColor))

Donde getColorCompat()es una función de extensión:

/**
 * Extension method to provide simpler access to {@link ContextCompat#getColor(int)}.
 */

 fun Context.getColorCompat(color: Int) = ContextCompat.getColor(this, color)

1
view.setBackgroundColor(R.color.primaryColor);

Agrega color al valor de color anterior, por lo que tengo un color diferente.

Lo que funciona para mí es:

view.setBackgroundResource(R.color.primaryColor);

1

Vamos a suponer que tenemos un color primario en el values=>colors.xmlque:

<resources>
    <color name="primary">#FDD835</color>
</resources>

así que si queremos usar nuestro color personalizado, setBackgroundColor(@ColorInt int Color)entonces solo necesitamos una anotación @SuppressLint("ResourceAsColor")con constructor / método que se usará como:

    @SuppressLint("ResourceAsColor")
    public _LinearLayout(Context context) {
        super(context);

        // Formatting our layout : )
        super.setBackgroundColor(R.color.primary);

        ....


    }

0

Debe pasar un inten el argumento.

Primer ejemplo:

view.setBackgroundColor(-500136)

Segundo ejemplo

int colorId = R.color.green;

view.setBackgroundResource(colorId);

0

Esto debería funcionar bien: v.setBackgroundColor(0xFF00FF00);


0

Intenté todas las formas anteriores. Pero no he logrado lo que necesito. Aquí está mi intento. Si está utilizando el código hexadecimal para el color y desea establecer el color como fondo de la imagen, entonces este es el código kotlin.

val bitmap = Bitmap.createBitmap(30, 30, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
val colorCode = "#ffffff"
canvas.drawColor(Color.parseColor(colorCode))
mImageViewLogo.setImageBitmap(bitmap)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.