Как установить одинаковый / одинаковый в коде цвет фона для двух представлений - PullRequest
3 голосов
/ 08 января 2020

Я пытался сделать:

view1.background = view2.background

, но это ничего не сделало. Затем я попытался получить фон view2 и сделал что-то вроде:

view1.setBackgroundColor(view2.getBackgroundColor)

Однако нет функции, чтобы получить цвет фона для вида. Как мне этого добиться?

Ответы [ 3 ]

1 голос
/ 08 января 2020

Вот метод setBackgroundColor для установки вида фона. мы также можем использовать setBackground для установки. мы видим, что они исходный код.

public void setBackgroundColor(@ColorInt int color) {
        if (mBackground instanceof ColorDrawable) {
            ((ColorDrawable) mBackground.mutate()).setColor(color);
            computeOpaqueFlags();
            mBackgroundResource = 0;
        } else {
            setBackground(new ColorDrawable(color));
        }
    }

public void setBackground(Drawable background) {
        //noinspection deprecation
        setBackgroundDrawable(background);
    }

параметр для setBackgroundColor - это цвет int, но API дает метод getBackground, он возвращает drawable.

public Drawable getBackground() {
        return mBackground;
    }

, поэтому мы можем сделать следующее:

Drawable background = v1.getBackground();
v2.setBackground(background)

В то же время, если мы хотим использовать setBackgroundColor, мы должны получить цвет int , но для этого требуется фон ColorDrawable

ColorDrawable background = (ColorDrawable)v1.getBackground();
int color = background.getColor();
v2.setBackgroundColor(color)

, поэтому я предлагаю вам использовать первый способ. что делает два вида фона одинаковыми.

по той причине, почему вы не можете напрямую присвоить значение. потому что после установки фона поток пользовательского интерфейса в android должен перерисовать , в этом случае конфигурация может дать эффект. если вы хотите узнать больше, вы можете увидеть метод setBackgroundDrawable в исходном коде.

0 голосов
/ 08 января 2020
        View view1 = findViewById(R.id.view1);
        View view2 = findViewById(R.id.view2);
        ColorDrawable viewColor = (ColorDrawable) view1.getBackground();
        int colorId = viewColor.getColor();

        view2.setBackgroundColor(colorId);
0 голосов
/ 08 января 2020

Вы должны сделать больше методов и получить это как это

 j.background = buttonContinueFirst?.background?.current

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