草庐IT

Android TextView 改变 textColor 与主题

coder 2023-12-16 原文

我正在尝试将我所有的样式放入我的应用程序的主题中。但是,我在更改 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/

有关Android TextView 改变 textColor 与主题的更多相关文章

  1. ruby - 改变替换的大小写 - 2

    我有以下内容:text.gsub(/(lower)(upper)/,'\1\2')我可以将\2替换为大写吗?类似于:sed-e's/\(abc\)/\U\1/'这在Ruby中可行吗? 最佳答案 查看gsub文档:str.gsub(模式){|匹配|block}→new_str在block形式中,当前匹配字符串作为参数传入,$1、$2、$`、$&、$'等变量将被适当设置。block返回的值将替换为每次调用的匹配项。"alowerupperb".gsub(/(lower)(upper)/){|s|$1+""+$2.upcase}

  2. ruby-on-rails - 在暂存环境中覆盖 ActionMailer 主题 - 2

    我希望从我们的登台服务器发送的所有电子邮件的主题中都带有“[STAGING]”字样。在Rails3.2中使用ActionMailer是否有一种优雅的方式来做到这一点? 最佳答案 这是我使用ActionMailerInterceptor找到的一个优雅的解决方案基于anexistinganswer.#config/initializers/change_staging_email_subject.rbifRails.env.staging?classChangeStagingEmailSubjectdefself.delivering_

  3. ruby - 为什么我不能改变 self 的值(value)? - 2

    为什么我可以这样改变“self”:self.map!{|x|x*2}或者这样:self.replace(self.map{|x|x*2})但不是这样:self=self.map{|x|x*2}为什么Ruby不允许我更改“self”变量指向的对象,但允许我更改对象的属性? 最佳答案 不是答案,只是一个线索。a=[1,2]=>[1,2]a.object_id=>2938a.map!{|x|x*2}=>[2,4]a.object_id#differentdatabutstillthesameobject=>2938a.replace(a.

  4. ruby - 为什么括号内的换行符会改变算术结果? - 2

    为什么下面的表达式会这样解析?括号的优先级应该高于换行符,不是吗?3-(1+1)#=>13-(1+1)#=>2省略加号也会让表达式计算为2:3-(11)#=>2如果我声明为连续的换行符(转义)或将加号移动到第一行,则会实现所需的行为:3-(1\+1)#=>13-(1+1)#=>1 最佳答案 这是因为Ruby将新行识别为表达式的结尾,除非表达式不完整。例如,(1+1)与相同(1;+1)这与+1相同,因为返回了括号内的最后一个表达式。这进一步与1相同。如果行尾有+,则表达式不完整,因此会继续到下一行。这使得:3-(1+1)被解释为3-(

  5. ruby-on-rails - 设计 Controller 如何改变布局? - 2

    这个问题在这里已经有了答案:differentlayoutforsign_inactionindevise(8个答案)关闭7年前。如何更改设计Controller中的布局?

  6. ruby - 如何检查我的主题是否引发异常? - 2

    我目前正在subject中创建一个对象,需要测试这是否会引发异常。以下代码说明了我要实现的目标:describeMyClassdodescribe'#initialize'dosubject{MyClass.new}it{is_expected.not_toraise_error(Some::Error)}endend我有一种感觉,我正在以错误的方式处理这件事。将subject设置为新对象而不创建对象两次的首选方法是什么?更新我的问题有两个。首先,这种语法不起作用:it{is_expected.not_toraise_error}但是,在itblock中使用expect确实如此(正如J

  7. kafka如何动态消费新增topic主题 - 2

    一、解决痛点使用spring-kafka客户端,每次新增topic主题,都需要硬编码客户端并重新发布服务,操作麻烦耗时长。kafkaListener虽可以支持通配符消费topic,缺点是并发数需要手动改并且重启服务。对于业务逻辑相似场景,创建新主题动态监听可以用kafka-batch-starter组件二、组件能力1、新增topic名称为:auto.topic1(由于配置spring.kafka.consumer.prefix为auto,因此只有auto前缀的topic,才会被组件动态监听。)2、应用输出日志,监听到新增auto.topic1,并初始化客户端(主题刷新间隔为10s)3、发新的消

  8. ruby-on-rails - Rails 3.2.13 与 Rails 4.0.1 - 改变了吗?方法变了? - 2

    我最近注意到ActiveRecord对象上的方法changed?在Rails3.2.13和Rails4.0.1之间发生了变化。问题在于连接到数据库中整数字段的字段。假设我的模型Model带有number整数字段:#Rails3.2.13m=Model.lastm.number#=>5m.number='5hello'm.number#=>5m.number_changed?#=>truem.changed?#=>truem.changes#=>{:number=>[5,5]}#Rails4.0.1m=Model.lastm.number#=>5m.number='5hello'm.nu

  9. ruby - 使用适用于 Ruby 的 AWS 开发工具包发布到 SNS 主题时指定区域 - 2

    我正在使用适用于Ruby的AWS开发工具包向Rails3应用程序发布消息和AWSSNS主题,如下所示:sns=AWS::SNS.newtopic=sns.topics['arn:aws:sns:eu-west-1:55555555555:my_topic']topic.publish("MESSAGE",:subject=>"SUBJECT")当我发布到“us-east-1”中的主题时,它按预期工作,但发布到“eu-west-1”区域中的主题时不起作用:AWS::SNS::Errors::InvalidParameter-Invalidparameter:TopicArn:使用AWSS

  10. ruby - 如何像 instance_eval 方法那样在一个 block 中改变 self 呢? - 2

    instance_eval方法在其block中改变自身,例如:classD;endd=D.newd.instance_evaldoputsself#printsomethinglike#,not'main'!end如果我们自己定义一个方法(或任何其他方法(除了instance_eval)需要一个block),当打印self时,我们将得到'main',这与instance_eval方法不同。例如:[1].eachdo|e|putsself#print'main'end我如何定义一个像instance_eval这样的方法(需要一个block)?提前致谢。 最佳答

随机推荐