Я пытаюсь найти способ переопределить непубличный атрибут стиля андроида, более конкретно атрибут atttribute с именем itemColor
стиля Widget.FragmentBreadCrumbs
. Этот стиль влияет на цвет текста корневой папки в PreferenceActivity
, когда фрагмент предпочтений отображается на правой панели для больших экранов. Он используется классом FragmentBreadCrumbs.Как переопределить частный атрибут стиля Android
Мое приложение использует настраиваемую тему, которая расширяет Theme.Holo.Light
, и тема разрывается на API 23, поэтому я пытаюсь найти обходной путь.
Вышеупомянутый стиль устанавливает значение по умолчанию itemColor
из @null
, которое не переопределено в теме Голо, в то время как, например, оно установлено в допустимое значение для темы Материал. В результате заголовок пачки не видно (см. screenshot for API 19 и screenshot for API 23)
Я предполагаю, что я пытаюсь найти способ, который может изменить личное значение темы, аналогичной тому, как отражение может быть используется для изменения значения частного поля для класса. Альтернативно, ContextThemeWrapper представляется многообещающим, но я просто не понимаю, как его использовать или даже если он применим в моей ситуации.
Что мне нужно, что после FragmentBreadCrumbs
класса выполняет его конструктор ниже атрибута mTextColor
не быть @null
(который я предполагаю, что это 0
), как установлено в конфигурации Android тему, но иметь действительное значение цвета.
Считаете ли вы, что это возможно?
public FragmentBreadCrumbs(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
final TypedArray a = context.obtainStyledAttributes(attrs,
com.android.internal.R.styleable.FragmentBreadCrumbs, defStyleAttr, defStyleRes);
mGravity = a.getInt(com.android.internal.R.styleable.FragmentBreadCrumbs_gravity,
DEFAULT_GRAVITY);
mLayoutResId = a.getResourceId(
com.android.internal.R.styleable.FragmentBreadCrumbs_itemLayout,
com.android.internal.R.layout.fragment_bread_crumb_item);
/* This is the value needed to be overridden */
mTextColor = a.getColor(
com.android.internal.R.styleable.FragmentBreadCrumbs_itemColor,
0);
a.recycle();
}
У вас есть FragmentBreadCrumbs объект в вашем коде? (Можете ли вы получить экземпляр?) @ C.s. –
@NirDuan Нет. Я не знаю, как его получить. Этот класс создается экземпляром '' в файле макета xml, используемом 'PreferenceActivity' –