在我的应用中,我在主屏幕中有ViewPager
,其中2个片段有自定义ListViews 。该应用程序具有不同的主题,每个主题中都有不同的文本颜色。
我已经在不同的主题下实现了XML本身的所有UI属性,并且工作正常,除了我在ViewPager中控制的自定义ListViews中的 TextColor 代码。
问题:如何从XMl控制TextColor?
我尝试将3个主题的颜色属性设置为TextStyle
,TextAppearence
,TextColor
等。但是当这些自定义ListView不在内时,相同的代码工作时没有任何效果ViewPager。
我没有添加任何特定代码,因为我尝试了很多方法。但作为一个例子,这是我用来设置TextColor的代码。
android:textColor="?attr/listItemContentTextColor"
属性为
<attr name="listItemContentTextColor" format="color" />
在主题中指定为
<item name="listItemContentTextColor">@android:color/white</item>
有什么方法可以从XML本身控制它吗?
答案 0 :(得分:1)
好吧,我找到了问题的答案。
我无法从XML本身控制它,但我可以动态地实现 而不是硬编码。的:)强>
问题仅出在ViewPager 中的那些自定义列表视图中,而这些视图没有从XML中获取属性。这就是我解决它的方法。
在 /values/attr.xml
中 <attr name="listFontColor" format="color" />
在每个Theme
中,我相应地设置了listFontColor属性值。
<item name="listFontColor">@android:color/white</item>
我没有检查代码中的每个主题,而是获取了当前主题,并在Adapter
中的代码中分配了字体颜色,
//dynamically fetching the theme's list font Color and setting it to textview
TypedArray a = ((MyActivity)context).getTheme().obtainStyledAttributes(((MyApplication)(context.getApplicationContext())).getcurrentTheme(), new int[] {R.attr.listFontColor});
int attributeResourceId = a.getResourceId(0, 0);
listTitle.setTextColor(context.getResources().getColor(attributeResourceId));
感谢reference :)