2 回答

TA貢獻1786條經驗 獲得超11個贊
好的,我找到了一種方法。如果您將 attr 屬性添加到首選項標頭,如下所示:
<header android:fragment="com.appname.settings.fragment.GeneralSettingsFragment" android:icon="?attr/ic_round_settings" android:title="@string/settings_general" android:summary="@string/settings_general_explain" />
并將該屬性添加到值文件夾中的 attr.xml 文件:
<attr name="ic_round_settings" format="reference"/>
并將其添加到帶有明暗版本圖標的 styles.xml 中的主題類中,主題將發生變化:
<style name="Theme.BaseLightTheme" parent="Theme.AppCompat"> <item name="ic_round_settings">@drawable/ic_round_settings_dark</item> </style> <style name="Theme.BaseDarkTheme" parent="Theme.AppCompat"> <item name="ic_round_settings">@drawable/ic_round_settings_light</item> </style>
在 SVG 圖標文件中,將淺色 SVG 圖標副本中的顏色從#000000 更改為#ffffff:
<path android:fillColor="#000000" android:pathData=""/>
編輯:這不適用于 Android 4.4 及以下版本——圖標根本不會出現

TA貢獻2011條經驗 獲得超2個贊
要實現該行為,請像這樣使用對 XML 中顏色的引用
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/btn_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?attr/colorAccent"
android:tint="?attr/colorAccent"
android:text="@string/chat_send_text"
android:drawableTint="?attr/colorAccent"
android:drawableRight="@drawable/ic_paper_plane"/>
</FrameLayout>
此外,在處理活動時**確保在使用**之前設置主題,否則在動態設置主題時setContentView(R.layout_your_layout_file)必須調用。recreate()
例子
override fun onCreate(savedInstanceState: Bundle?) {
setTheme(whatever_theme_you_want_to_use)
setContentView(R.layout.activity_cool)
// Further view initialization
}
缺點是您必須setTheme在所有活動中明確指出,因為 Android 沒有為開發人員提供更簡單的方法來更改整個應用程序的主題。
添加回答
舉報