我正在尝试将我所有的样式放入我的应用程序的主题中。但是,我在更改 TextView 上的 textColor 时遇到了问题。这是来 self 的 attrs.xml 文件。
<?xml version="1.0" encoding="utf-8"?>
<declare-styleable name="flat">
<attr name="detail_name_view" format="reference" />
</declare-styleable>
这是来 self 的styles.xml 文件
<style name="flat_theme" parent="android:Theme.NoTitleBar">
<item name="detail_name_view">@style/flat_detail_name</item>
</style>
<style name="flat_detail_name" parent="@android:style/Widget.TextView">
<item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
<item name="android:textColor">@color/detail_group_black</item>
<item name="android:textSize">16sp</item>
<item name="android:singleLine">true</item>
<item name="android:ellipsize">end</item>
</style>
这是来 self 的layout.xml 文件
<TextView
android:id="@+id/detail_name"
style="?detail_name_view"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_gravity="left|center_vertical"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:gravity="left|center_vertical" />
我还使用以下内容正确设置了 list 。
<application
android:name="com.example.blah"
android:icon="@drawable/blah"
android:label="@string/app_name"
android:theme="@style/flat_theme"
颜色永远不会更改为“@color/detail_group_black”。我错过了一些简单的东西吗?或者是 Android 已经在为 TextView 创建 textColor 属性的问题,这就是样式没有覆盖它的原因?我的属性主题策略似乎适用于应用程序的其余部分,但不适用于此。有任何想法吗?提前致谢。
此外,如果有帮助的话,我宁愿不为此更改创建自定义 TextView 类:它是一个相当大的项目,我不确定如果我为所有内容扩展 TextView 可能会遇到什么样的问题.
编辑 此外,如果我将 TextView 更改为具有 style="@style/flat_detail_name_view",它工作正常。我不想这样做的原因是我可以通过更改主题来更改这些 TextView 的外观。使用 style="?something_else"适用于我的所有其他 View ,所以我真的不明白这一点,我可能遗漏了一些简单的东西?
最佳答案
我找到了我的问题,以防有人遇到类似情况!基本上这不起作用的原因是因为我用以下代码膨胀了 View 。
private View buildGroupView(ExpandListGroup group) {
LayoutInflater inf = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
View view;
switch(group.getType()){
case ExpandListGroup.HEADER :
view = inf.inflate(R.layout.three_col_header, null);
break;
default:
view = inf.inflate(R.layout.detail_expandablelist_group_item, null);
break;
}
return view;
}
在我的 Adapter 的 getGroupView 中我返回了它。
public View getGroupView(int groupPosition, boolean isLastChild, View convertView,
ViewGroup parent) {
View view = convertView;
ExpandListGroup group = (ExpandListGroup) getGroup(groupPosition);
view = buildGroupView(group);
setGroupViewData(group, view);
return view;
}
显然我的问题是我需要替换 LayoutInflater
inf = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
与..
LayoutInflater inf = mActivity.getLayoutInflater();
正如 CommonsWare 在本文底部所建议的:Theme/Style is not applied when inflater used with ApplicationContext .
感谢您的帮助。
关于Android TextView 改变 textColor 与主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18136369/