Программно Linearlayout установить цвет фона с помощью атрибута - PullRequest
0 голосов
/ 25 мая 2019

У меня есть диалоговое окно с предупреждением, где я определяю макет программно.У меня есть линейный макет, который я хочу установить атрибут, чтобы во время выполнения я мог изменить цветовую тему приложения.Я получаю большинство вещей, чтобы работать, но я не могу понять, как сделать линейный макет, поскольку он не определен в XML.

У меня есть шестнадцатеричный код цвета, жестко закодированный я, но это не то, что я хочу.Есть ли способ установить атрибут как? Attr / colorPrimary

alertAFFY = new AlertDialog.Builder(AddMakeActivity.this);
            LinearLayout mainLayout = new 
            LinearLayout(AddMakeActivity.this);
            mainLayout.setOrientation(LinearLayout.VERTICAL);
            LinearLayout layoutTitle = new LinearLayout(AddAlarmActivity.this);
            layoutTitle.setOrientation(LinearLayout.HORIZONTAL);
            TextView title = new TextView(getApplicationContext());
            title.setPadding(0, 30, 0, 30);



            title.setTextColor(Color.parseColor("#FFFFFF"));

            title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 24);
            title.setText("Select One");
            layoutTitle.setGravity(Gravity.CENTER_HORIZONTAL);
            layoutTitle.addView(title);


     **//  i need to change the background color to take in ?attr/ **

            layoutTitle.setBackgroundColor(Color.parseColor("#F8B195"));

            layoutTitle.setMinimumHeight(20);
            mainLayout.addView(layoutTitle);

Я пытаюсь получить доступ к атрибуту темы

  <style name="Theme1" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/toolbarColor</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorDays">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowNoTitle">true</item>
</style>

Есть ли способ установить атрибут для линейногоцвет фона макета?Мне нужно, чтобы он был динамичным, чтобы я мог изменить его во время выполнения.Там не может быть жестко закодировано

1 Ответ

2 голосов
/ 25 мая 2019

Попробуйте это:

TypedValue typedValue = new TypedValue();

getApplicationContext().getTheme().resolveAttribute(android.R.attr.colorPrimary, typedValue, true);

// it's probably a good idea to check if the color wasn't specified as a resource
if (typedValue.resourceId != 0) {
    layoutTitle.setBackgroundResource(typedValue.resourceId);
} else {
    // this should work whether there was a resource id or not
    layoutTitle.setBackgroundColor(typedValue.data);
}
...