Ответ 1
Вы найдете решение здесь: http://groups.google.com/group/android-developers/browse_thread/thread/4910bae94510ef77/59d4bb35e811e396?pli=1
Это будет что-то вроде этого:
((PaintDrawable) tv.getBackground()).getPaint()
Есть ли такой метод для вызова метода getBackgroundColor в TextView? если у меня есть 2 textViews: tv1 и tv2 в одном LinearLayout. Что я сделал: tv1.setBackgroundColor(Color.BLUE)
Теперь, если я хочу, чтобы setBackgroundColor tv2 был таким же, как tv1, как я могу получить backgroundColor в tv1, а затем setBackgroundColor tv2?
Вы найдете решение здесь: http://groups.google.com/group/android-developers/browse_thread/thread/4910bae94510ef77/59d4bb35e811e396?pli=1
Это будет что-то вроде этого:
((PaintDrawable) tv.getBackground()).getPaint()
Лучшее решение, чем бурбоны:
((ColorDrawable)view.getBackground()).getColor();
Преимущество состоит в том, что мы получаем целое число, сопоставимое с перечислениями цвета, заданными классом Color.
Установка цвета фона устанавливает Drawable с указанным цветом в качестве фона, то есть следующий пример будет работать очень хорошо:
@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());
}
Нет такого метода, потому что в общем есть "цвет фона" - может быть любой объект Drawable
(например, изображение). Итак, вы должны помнить, какой цвет вы задали для текста.
Если вы не можете сохранить его, используйте методы View.setTag()
и View.getTag()
для хранения любого значения, связанного с представлением.
Вот еще один вариант:
Как я решил эту проблему для моего приложения, я должен был определить цвета в values /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>
В макете TextView
есть:
android:background="@color/textview_background"
Если я хочу получить цвет фона в коде, я могу просто использовать:
getResources().getColor(R.color.textview_background)
Это дает мне объект Color
напрямую, не беспокоясь о том, как получить цвет от Drawable
.
Это работает для меня.
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;
}