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/m.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燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP