Android TextView: configurar el color de fondo dinámicamente no funciona


169

Establecer el color de fondo programáticamente de un Android TextViewno parece funcionar. Me estoy perdiendo algo!

TextView et = new TextView(activity);
et.setText("350");
et.setBackgroundColor(R.color.white);

También tengo este archivo (colors.xml) en mi carpeta res / values

<resources>
        <color name="white">#ffffffff</color>
        <color name="black">#ff000000</color>
</resources>

[EDITAR]: Además, establecer el color del texto hace que TextView desaparezca.

TextView c1 = new TextView(activity);
c1.setTextColor(R.color.solid_red);
c1.setText("My Text");

Respuestas:


333

Utilizar et.setBackgroundResource(R.color.white);


55
La API de Android es realmente algo, ¿por qué no podría arrojar un error?
Tawani el

53
Porque no es un error. setBackgroundColor () toma un color en forma numérica (por ejemplo, 0xFFFF0000 para rojo). R.color.white también es un número.
CommonsWare

66
D'oh! Definitivamente, esto podría haberse hecho mejor con enumeraciones en lugar de entradas ubicuas. Gracias por la respuesta.
Wojciech Górski

2
¡ Podrían estar usando diferentes tipos de firmas! Uno llamado ColorId y otro llamado HexColor o algo así. Ambos son enteros, pero no son del mismo tipo

1
Muy extraño. De la documentación: el recurso debe hacer referencia a un objeto Drawable o 0 para eliminar el fondo.
Artem

73

Prueba esto:

TextView c1 = new TextView(activity);
c1.setTextColor(getResources().getColor(R.color.solid_red));
c1.setText("My Text");

Estoy de acuerdo en que un color y un recurso tienen el mismo tipo, pero también paso algunas horas para encontrar esta solución.


2
No lo entiendo completamente en este momento (revisando los api doc) pero funciona, así que ¡gracias!
CodeJustin.com

Gracias, me has salvado unas horas! Ahora que conozco la solución, tiene sentido para mí, pero estoy seguro de que me habría llevado unas horas resolverlo por mi cuenta.
FreewheelNat

Gracias. La API de Android es realmente no intuitiva a veces.
suDocker

64

Para establecer el color rojo:

textView.setBackgroundColor(0xfff00000);

O

<color name="solid_red">#fff00000</color>

textView.setBackgroundResource(R.color.solid_red);

1
Para hacer eco de la respuesta de badMonkey, dado que esta es la respuesta más popular, DEBE establecer los bits de orden superior en no cero para la transparencia. Me atrapa todo el tiempo especificando el RGB sin la A. Para establecer el fondo en azul puro, use 0xff0000ff, no 0x0000ff o no funcionará.
JohnnyLambada

En el archivo .xml, el valor de un elemento <color> funciona solo con los 6 dígitos clásicos: # FF0000
Arma X

@WeaponX: funciona bien con colores transparentes (en 8 dígitos).
CoolMind

@Weapn X La función toma un número entero, 4 bytes. 6 dígitos hexadecimales son 3 bytes.

20

Tuve un problema similar cuando estaba creando un color numérico sin considerar el canal alfa principal. es decir. mytext.setTextColor(0xFF0000)(pensando que esto sería rojo). Si bien este es un color rojo, también es 100% transparente, ya que it = 0x00FF0000; el valor correcto de 100% opaco es 0xFFFF0000o mytext.setTextcolor(0xFFFF0000).


10

Solo esta 1 línea de código cambió el fondo programáticamente

tv.setBackgroundColor(Color.parseColor("#808080"));

8

Bueno, tuve una situación en la que el servicio web devolvió un color en formato hexadecimal como "# CC2233" y quería poner este color en textView usando setBackGroundColor (), por lo que utilicé la clase de color de Android para obtener el valor int de la cadena hexadecimal y lo pasé a Función mencionada. Todo funcionó. Este es un ejemplo:

String myHexColor = "#CC2233";
TextView myView = (TextView) findViewById(R.id.myTextView);
myView.setBackGroundColor(Color.pasrsehexString(myHexColor));

PS publicó esta respuesta porque otras soluciones no funcionaron para mí. Espero que esto ayude a alguien:)


5

aquí hay poco detalle,

si estás en actividad usa esto

textview.setBackground(ContextCompat.getColor(this,R.color.yourcolor));

si está fragmentado, use el siguiente código

textview.setBackground(ContextCompat.getColor(getActivity(),R.color.yourcolor));

si está en el adaptador de la vista de reciclaje, use el siguiente código

textview.setBackground(ContextCompat.getColor(context,R.color.yourcolor));

// use holder.textview if you are in onBindviewholder
//here context is passed from fragment

4

Estos son los pasos para hacerlo correctamente:

  1. En primer lugar, declare una instancia de TextView en su MainActivity.java de la siguiente manera:

    TextView mTextView;
  2. Establezca un texto DINÁMICAMENTE (si lo desea) de la siguiente manera:

    mTextView.setText("some_text");
  3. Ahora, para establecer el color de fondo, debe definir su propio color en el archivo res-> values-> colors.xml de la siguiente manera:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
  4. Ahora puede usar el color "my_color" en su archivo java para configurar el fondo dinámicamente de la siguiente manera:

    mTextView.setBackgroundResource(R.color.my_color);


3

Color.parseHexColor("17ee27")no funcionó para mí, en cambio Color.parseColor("17ee27")funcionó perfectamente.


2

dos formas de hacer eso:

1.crear color en el archivo colors.xml como:

<resources>
        <color name="white">#ffffff</color>
</resources>

y úsalo int activity java class como:

et.setBackgroundResource(R.color.white);

2)

et.setBackgroundColor(getResources().getColor(R.color.white));
                or
et.setBackgroundColor(Color.parseColor("#ffffff"));

2

Si desea admitir todas las versiones: intente esto:

myTextView.setBackgroundColor(ContextCompat.getColor(this,R.color.mycolor)); 

1

Solo uso

ArrayAdapter<String> adaptername = new ArrayAdapter<String>(this,
            android.R.layout.simple_dropdown_item_1line, your array list);

-10

puede usar android:textColor= "cualquier color de texto que desee "en el archivo xml donde se declara su vista de texto.


Programaticamente ... no xml
aLL
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.