2012-01-13 15 views
25

¿Existe un método como "getBackgroundColor" en TextView? si tengo 2 textViews: tv1 y tv2 en un LinearLayout. Lo que hice: tv1.setBackgroundColor (Color.BLUE)¿Existe tal método llamado "getBackgroundColor"?

Ahora si quiero setBackgroundColor de TV2 como el mismo que TV1, ¿cómo puedo obtener el backgroundColor en TV1 primero y luego setBackgroundColor de TV2?

Respuesta

11

Va a encontrar la solución aquí: http://groups.google.com/group/android-developers/browse_thread/thread/4910bae94510ef77/59d4bb35e811e396?pli=1

será algo así:

((PaintDrawable) tv.getBackground()).getPaint() 
+2

Pero, de hecho, si desea copiar el dibujo, no hay problema, un color es un dibujo, así que copie el dibujo como lo mencionó Jens. – Bourbon

+4

Esto puede funcionar si la Vista en cuestión es una Vista de texto, pero si se trata de una Vista genérica, arrojará una 'ClassCastException': ** android.graphics.drawable.NinePatchDrawable **. – ateiob

+1

@Bourbon ¿Cómo puedo compararlo? Quiero comparar un color de fondo de TextView con un color como Blanco. ¿Cómo puedo hacerlo? – Behzad

4

No hay tal método, porque en común ahora hay "color de fondo" - puede haber cualquier objeto Drawable (por ejemplo, una imagen). Entonces, debes recordar qué color configuras para el texto.

Si no puede guardarlo, use los métodos View.setTag() y View.getTag() para almacenar cualquier valor asociado con la vista.

12

Configuración de un color de fondo establece un Disponibles con ese color especificado como el fondo, es decir, el siguiente ejemplo funcionará bien:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.some_layout_name); 
    TextView t1 = (TextView) findViewById(R.id.text1); 
    TextView t2 = (TextView) findViewById(R.id.text2); 

    t1.setBackgroundColor(Color.GREEN); 
    t2.setBackgroundDrawable(t1.getBackground()); 
} 
+0

Esta es, de lejos, la solución más elegante. Debe ser la respuesta aceptada. +1. – ateiob

+0

Ahora dice, setBackgroundDrawable() está en desuso. ¿Alguna otra opción? – batbaatar

36

hay una solución mejor que bourbons:

((ColorDrawable)view.getBackground()).getColor(); 

La ventaja es que obtenemos un número entero que es comparable a las enumeraciones de color dadas por la clase Color.

+4

Respuesta bonita y breve, pero desafortunadamente para mí: ColorDrawable.getColor() no está disponible antes del nivel 11 de la API. – sunadorer

0

Aquí es una opción adicional:

La forma en que resuelto este problema para mi aplicación fue definir los colores de los valores/color.xml.

<resources> 

    <color name="blue">#ff0099cc</color> 
    <color name="dark_grey">#ff1d1d1d</color> 
    <color name="white">#ffffffff</color> 
    ... 

    <color name="textview_background">@color/white</color> 

</resources> 

En el diseño de la TextView tiene:

android:background="@color/textview_background" 

Si quiero conseguir el color de fondo en el código que sólo puede utilizar:

getResources().getColor(R.color.textview_background) 

Esto me da un objeto Color directamente sin preocuparse por obtener el color de Drawable.

0

Funciona para mí.

public static int getColor(View v) { 
    if(Build.VERSION.SDK_INT>=11) 
    { 
     return ((ColorDrawable)v.getBackground()).getColor(); 
    } 
    else 
    { 
     try 
     { 
     Field f=View.class.getDeclaredField("mState"); 
     f.setAccessible(true); 
     Object mState=f.get(v); 
     Field f2=mState.getClass().getDeclaredField("mUseColor"); 
     f2.setAccessible(true); 
     return (int) f2.get(mState); 
     } 
     catch (Exception e) 
     { 

     } 
    } 
    return 0; 
} 
Cuestiones relacionadas