Android 自定义ListView文本颜色在Viewpager中时不随主题变化
在我的应用程序中,主屏幕上有一个Android 自定义ListView文本颜色在Viewpager中时不随主题变化,android,android-viewpager,android-theme,custom-lists,textcolor,Android,Android Viewpager,Android Theme,Custom Lists,Textcolor,在我的应用程序中,主屏幕上有一个ViewPager,其中两个片段具有自定义列表视图。应用程序有不同的主题,每个主题中有不同的文本颜色 我已经在不同的主题下实现了XML本身的所有UI属性,除了ViewPager内部自定义ListView中的文本颜色(我通过代码控制)外,其他都工作正常 问题:如何从XMl控制TextColor? 我已尝试将3个主题的颜色属性设置为TextStyle,textpearearence,TextColor等。但是,当这些自定义列表视图不在ViewPager中时,当相同的代
ViewPager
,其中两个片段具有自定义列表视图。应用程序有不同的主题,每个主题中有不同的文本颜色
我已经在不同的主题下实现了XML本身的所有UI属性,除了ViewPager内部自定义ListView中的文本颜色(我通过代码控制)外,其他都工作正常
问题:如何从XMl控制TextColor?
我已尝试将3个主题的颜色属性设置为TextStyle
,textpearearence
,TextColor
等。但是,当这些自定义列表视图不在ViewPager中时,当相同的代码工作时,没有任何效果
我没有添加任何特定的代码,因为我已经尝试了许多方法。但作为一个例子,这是我用来设置TextColor的代码
android:textColor="?attr/listItemContentTextColor"
属性所在的位置
<attr name="listItemContentTextColor" format="color" />
在主题中指定为:
<item name="listItemContentTextColor">@android:color/white</item>
@android:color/white
有什么方法可以从XML本身控制它吗?嗯,我找到了问题的答案 我无法从XML本身控制它,但我可以动态地实现它,而不是硬编码它:) 问题只存在于ViewPager中的自定义列表视图中,这些视图没有从XML中获取属性。我就是这样解决的 在/values/attr.xml中
<attr name="listFontColor" format="color" />
我没有检查代码中的每个主题,而是获取当前主题并在我的适配器中指定代码中的字体颜色,如下所示
//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));
谢谢你的:)嗯,我找到了我问题的答案
我无法从XML本身控制它,但我可以动态地实现它,而不是硬编码它:)
问题只存在于ViewPager中的自定义列表视图中,这些视图没有从XML中获取属性。我就是这样解决的
在/values/attr.xml中
<attr name="listFontColor" format="color" />
我没有检查代码中的每个主题,而是获取当前主题并在我的适配器中指定代码中的字体颜色,如下所示
//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));
谢谢你的:)