2012-01-13 11 views
25

Czy istnieje taka metoda wywoływania "getBackgroundColor" w TextView? jeśli mam 2 textViews: tv1 i tv2 w jednym LinearLayout. Co zrobiłem: tv1.setBackgroundColor (Color.BLUE)Czy istnieje taka metoda wywoływania "getBackgroundColor"?

Teraz jeśli chcę setBackgroundColor TV2 tak samo jak TV1, w jaki sposób można dostaję backgroundColor w TV1 a potem setBackgroundColor TV2?

Odpowiedz

11

Znajdziecie rozwiązanie tutaj: http://groups.google.com/group/android-developers/browse_thread/thread/4910bae94510ef77/59d4bb35e811e396?pli=1

To będzie coś takiego:

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

Ale tak naprawdę, jeśli chcesz skopiować losowanie, nie ma problemu, kolor jest rysowalny, więc skopiuj rysunki, o czym wspomniał Jens. – Bourbon

+4

Może to działać, jeśli dany widok jest TextView, ale jeśli jest to widok ogólny, wyświetli "ClassCastException": ** android.graphics.drawable.NinePatchDrawable **. – ateiob

+1

@Bourbon Jak mogę to porównać? Chcę porównać kolor tła TextView z kolorem białym. Jak mogę to zrobić? – Behzad

4

Nie ma takiej metody, ponieważ w powszechnym użyciu jest teraz "kolor tła" - może istnieć dowolny obiekt Drawable (na przykład obrazek). Powinieneś więc pamiętać, jaki kolor ustawiłeś dla tekstu.

Jeśli nie możesz go zapisać, użyj metod View.setTag() i View.getTag() do zapisania dowolnej wartości związanej z widokiem.

12

Ustawienie koloru tła ustawia rozciągliwej z tym określonym kolorem w tle, czyli poniższym przykładzie będzie działać poprawnie:

@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

Jest to zdecydowanie najbardziej eleganckie rozwiązanie. To powinna być zaakceptowana odpowiedź. +1. – ateiob

+0

Teraz mówi, że setBackgroundDrawable() jest przestarzałe. Każda inna opcja? – batbaatar

36

Istnieje lepsze rozwiązanie niż bourbon:

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

Zaletą jest to, że otrzymujemy liczbę całkowitą, która jest porównywalna z wartościami kolorystycznymi podanymi przez klasę Kolor.

+4

Dobra i krótka odpowiedź, ale niestety dla mnie: ColorDrawable.getColor() nie jest dostępna przed API na poziomie 11. – sunadorer

0

Tutaj znajduje się dodatkowa opcja:

Sposób I rozwiązać ten problem dla mojego app było określenie kolorów w wartościach/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> 

W UKŁAD TextView posiada:

android:background="@color/textview_background" 

Jeśli chcę uzyskać kolor tła w kodzie można po prostu użyć:

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

To daje mi Color obiekt bezpośrednio bez obawy o uzyskanie koloru z Drawable.

0

To działa dla mnie.

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; 
} 
Powiązane problemy