Есть ли такой вызов метода "getBackgroundColor"? - PullRequest
25 голосов
/ 13 января 2012

Есть ли такой вызов метода "getBackgroundColor" в TextView? если я получил 2 textViews: TV1 и TV2 в одном LinearLayout. Что я сделал: tv1.setBackgroundColor (Color.BLUE)

Теперь, если я хочу установить цвет фона для TV2 так же, как и для TV1, как я могу сначала получить фоновый цвет в tv1, а затем установить цвет фона для TV2?

Ответы [ 6 ]

36 голосов
/ 14 декабря 2013

Есть лучшее решение, чем бурбоны:

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

Преимущество в том, что мы получаем целое число, сравнимое с перечислением цветов, заданным классом Color.

13 голосов
/ 13 января 2012

Установка цвета фона устанавливает 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());
}
11 голосов
/ 13 января 2012

Вы найдете решение здесь: http://groups.google.com/group/android-developers/browse_thread/thread/4910bae94510ef77/59d4bb35e811e396?pli=1

Это будет примерно так:

((PaintDrawable) tv.getBackground()).getPaint()
4 голосов
/ 13 января 2012

Такого метода не существует, потому что в общем теперь есть «цвет фона» - может быть любой объект Drawable (например, изображение). Итак, вы должны помнить, какой цвет вы устанавливаете для текста.

Если вы не можете сохранить его - используйте методы View.setTag() и View.getTag() для сохранения любого значения, связанного с представлением.

0 голосов
/ 04 апреля 2017

у меня работает.

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;
}
0 голосов
/ 27 августа 2014

Вот дополнительная опция:

Способ решения этой проблемы для моего приложения состоял в том, чтобы определить цвета в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...