У меня есть построитель диалоговых окон предупреждений, в котором я программно определяю макет. У меня есть линейный макет, для которого я хочу установить атрибут, поэтому во время выполнения я могу изменить цветовую тему приложения. У меня работает большинство вещей, но я не могу понять, как сделать линейный макет, поскольку он не определен в xml.
У меня есть жестко закодированный шестнадцатеричный цветовой код i, но это не то, что я хочу. Есть ли способ установить такой атрибут, как ?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>
Есть ли способ установить атрибут для цвета фона линейного макета? Мне нужно, чтобы он был динамическим, чтобы я мог изменить его во время выполнения. Это не может быть жестко закодировано там




Попробуй это:
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);
}
Это обращается к R.attr, который имеет неправильный цвет, а не то, что я хочу. Это не изменится с темой. я хочу получить доступ к <style name = "Theme1" parent = "Theme.AppCompat.Light.DarkActionBar"> <item name = "colorPrimary">@color/toolbarColor</item>
Не хотите задать стиль LinerLayout ?
неважно, я понял. Пришлось немного переделать, но работает.
TypedValue typedValue = new TypedValue(); Тема Resources.Theme = getTheme(); theme.resolveAttribute(R.attr.colorAccent, typedValue, true); @ColorInt int color = typedValue.data; layoutTitle.setBackgroundColor (цвет);
Если вы используете from
Fragment, то вы используетеgetActivity()вместоgetApplicationContext()