AndroidDev 板


LINE

我在 color.xml 里设定了几个主要色系以及文字颜色 然後套用在其他 layout.xml 以及 drawable.xml 里面 但是我现在突然要做一个切换色系的功能 大概需要切换五种色系 色码都有了 每种色系要改五种颜色(三种主色 + 两种字体颜色) 因为之前没做过 加上我有些颜色都已经直接写在 layout.xml 或 drawable.xml 里面了 类似这样: <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/main_color" android:textSize="20sp" /> 或是: <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/main_color" android:state_pressed="true" /> <item android:drawable="@color/sub_color" /> </selector> 我试过 ColorDrawable 不过似乎无法更改 layout.xml 或 drawable.xml 内部的颜色 这里该怎麽改呢? 或是有其他改法吗? --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.222.191.73
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1505883053.A.119.html
1F:推 paulku: textview设ID ex textviewTarget 09/20 13:12
2F:→ paulku: ((TextView)findViewById(R.id.textviewTarget)).setTextC 09/20 13:13
3F:→ paulku: (接上) .setTextColor() 09/20 13:14
4F:→ paulku: 这样就可以了 很简易 09/20 13:14
5F:→ gcobc12632: 我是要改整个APP内的颜色(切换色系) 09/20 13:20
6F:→ gcobc12632: 应该说是切换样式那样… 09/20 13:21
7F:推 benntqoo: 写theme设定不同主题的颜色档 09/20 14:14
8F:→ benntqoo: 可以大方向的更改整个app 09/20 14:14
9F:→ gcobc12632: 写theme的话可以连xml内的设定都一起更改吗? 09/20 14:16
10F:→ benntqoo: 应该可以试着写对应的style搭配theme更改整个颜色不要写 09/20 14:18
11F:→ benntqoo: 死颜色更换在程式码中 09/20 14:18
12F:→ benntqoo: 应该可以达到换颜色的效果 09/20 14:18
13F:→ benntqoo: 不确定是不是最佳解,功有点多 09/20 14:18
14F:推 benntqoo: 你要的功能应该是类似这样 09/20 14:23
15F:→ benntqoo: https://goo.gl/bjGicU 09/20 14:23
16F:→ benntqoo: 但是特定textView颜色可能要额外处理 09/20 14:23
17F:→ gcobc12632: 楼上那个网页的方法…有看没有懂 我程式功力还太弱了 09/20 17:33
後来用了另一种方法:直接多写好几个 layout(layout1.xml、layout2.xml…) 每个 layout 再套用自己的配色 然後在 setContentView 的地方做切换 虽然挺蠢的 不过以我的能力来讲这大概是比较好的方法了…  
18F:→ ssccg: Theme的写法是xml(layout、drawable...)用到颜色的地方都必 09/21 15:14
19F:→ ssccg: 须指到某个attr(写成?attrName这种) 09/21 15:16
20F:→ ssccg: 然後只要在theme里面指定这些attr实际上是对应到哪个color 09/21 15:17
21F:→ ssccg: 换掉Theme就会整组换掉了 09/21 15:17
22F:→ ssccg: 这些都只要xml设定不用改程式 09/21 15:21
我大概会用了! 用关键字 attr Google 後写了一小段测试的 似乎是可行的? 流程如下: 先在 values 资料夹下创一个 attrs.xml <resources> <declare-styleable name="main"> <attr name="main_color" format="color" /> </declare-styleable> </resources> 然後在 style.xml 内设定: <style name="main" parent="Theme.AppCompat.NoActionBar"> <item name="main_color">@color/main_color</item> </style> <style name="main2" parent="Theme.AppCompat.NoActionBar"> <item name="main_color">@color/main_color2</item> </style> 接着在 activity_main.xml 内设定: <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="?attr/main_color"/> 最後在程式内设定: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (style == 0) { setTheme(R.style.main); } else { setTheme(R.style.main2); } setContentView(R.layout.activity_main); } 是不是这样就可以了呢?  
23F:→ ssccg: 这样没错,不过换Theme必须重启Activity就是,可接受就ok 09/21 18:30
大感谢!  
24F:→ ssccg: 另外android 5.0之前有个bug,drawable中不能用attr 09/21 18:36
25F:→ ssccg: 如果要支援5.0之前的版本,drawable还是必须用多个xml 09/21 18:36
我也发现到了… 原本有写几个 selector.xml 内部改成 attr 就会 crash 那这样 drawable 该怎麽修改呢? 我照着这篇去做: https://stackoverflow.com/a/13471695 结果还是 crash… android.view.InflateException: Binary XML file line #42: Error inflating class android.widget.ListView Caused by: android.content.res.Resources$NotFoundException: File res/drawable/selector.xml from drawable resource ID #0x7f020057 以下是我的写法: attrs.xml <resources> <declare-styleable name="format"> <attr name="main_color" format="color" /> <attr name="sub_color" format="color" /> <attr name="list_view_selector" format="reference" /> </declare-styleable> </resources> selector.xml <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="?attr/main_color" android:state_pressed="true" /> <item android:drawable="?attr/sub_color" /> </selector> style.xml <style name="main" parent="Theme.AppCompat.NoActionBar"> <item name="main_color">@color/main_color</item> <item name="sub_color">@color/sub_color</item> <item name="list_view_selector">@drawable/selector</item> </style> activity_main.xml <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:listSelector="?attr/list_view_selector" />
26F:推 benntqoo: 痾,没有要你看那个网页做 09/21 18:49
27F:→ benntqoo: 抱歉让你误会 09/21 18:49
28F:→ benntqoo: 只是他那个lib产生的效果应该是我认为你想要的结果 09/21 18:50
那个看起来也是差不多的效果 但是实作对我来说有点困难…  
29F:→ ssccg: drawable要在5.0前用就只能写多个,把你的selector.xml复制 09/21 21:55
30F:→ ssccg: 一份像你原本的,各个Theme的list_view_selector再用对应的 09/21 21:57
31F:→ ssccg: (原本的是说里面直接写@color的) 09/21 21:59
32F:→ ssccg: 或是你连结那篇下面有个用ColorStateList的方法,但那必须 09/21 22:15
33F:→ ssccg: 用程式去设ColorStateList给view,不能直接写在layout中 09/21 22:16
看来只能这样了 复制多个 selector.xml 在 style.xml 内去各个对应 不过已经比一开始好很多了 - 处理完切换色系的问题了 还有一个额外的疑问是 该怎麽切换自己的「字体」? 我有在 assets 资料夹底下放几个 .ttf 字体档案 但是查了一下发现要设定自己的字体 几乎都要在程式面处理 像是: Typeface type = Typeface.createFromAsset(getAssets(),"kaiu.ttf"); myTextView.setTypeface(type); 有没有办法像前面改色系那样 从 attr 去设定呢 再用 theme 去做一次套用呢? 这样直接改 .xml 比较快…   - 最後是写个自定义的 class 继承 TextView 在内部写个改字体的 switch 然後再把 xml 内的 <TextView 改成自定义的 TextView 之後就能直接套用了   ※ 编辑: gcobc12632 (61.222.191.73), 09/25/2017 16:43:34







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP