2 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
使用屬性值設(shè)置顏色
例如,這是 textview 的顏色
<attr name="textviewcolor" format="color"></attr>
在 style.xml 中為不同的主題選擇創(chuàng)建不同的樣式
這是深色主題樣式的文本顏色
<style name="AppTheme.Dark" parent="Theme.AppCompat.Light.NoActionBar"><item name="textviewcolor">#fff</item></style>
這是默認(rèn)主題樣式的文本顏色
<style name="AppTheme.Defult" parent="Theme.AppCompat.Light.NoActionBar"><item name="textviewcolor">#000</item></style>
使用此屬性值(textviewcolor)到textview來(lái)設(shè)置顏色,如下所示
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="text" android:textColor="?attr/textviewcolor"/>
您只需在按鈕單擊中更改共享首選項(xiàng)中的主題名稱(chēng)并刷新活動(dòng),其余的事情將在下面提到您將如何做到這一點(diǎn)..
首先像這樣創(chuàng)建主題util類(lèi)
public class ThemeUtil {
public static final int THEME_DEFAULT=1;
public static final int THEME_DARK=2;
public static final int ALERTTHEME=3;
public static final int ALERTTHEMEDARK=4;
public static int getThemeId(int theme){
int themeId=0;
switch (theme){
case THEME_DARK:
themeId = R.style.AppTheme_Dark;
break;
case THEME_DEFAULT :
themeId = R.style.AppTheme;
break;
default:
break;
}
return themeId;
}}
建議:使用共享首選項(xiàng)來(lái)指定主題的名稱(chēng)
然后創(chuàng)建一個(gè)抽象類(lèi),通過(guò)擴(kuò)展該類(lèi)將主題設(shè)置為所有活動(dòng)
public class ChangethemeActivity extends AppCompatActivity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//get your theme name using sharedpreference and check what you have saved in theme name value
if(dark){
setTheme(ThemeUtil.getThemeId(1));
}
else{
setTheme(ThemeUtil.getThemeId(2));
} }}}
最后:在要更改主題的活動(dòng)中使用 ChangethemeActivity而不是 AppCompatActivity
這是我實(shí)現(xiàn)應(yīng)用程序主題更改功能的方式,請(qǐng)告訴我這是否解決了您的問(wèn)題

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
創(chuàng)建一個(gè)基本活動(dòng)并從中擴(kuò)展所有其他活動(dòng),然后在基本活動(dòng)的 onCreate 方法中設(shè)置主題,例如:
public abstract class BaseActivity extends AppCompatActivity{
private int theme;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(theme);
}
}
private void setTheme(int theme){
this.theme = theme;
}
然后,當(dāng)您想要更改主題時(shí),只需在 theme 中設(shè)置另一個(gè)主題資源 id 并重新啟動(dòng)您的 Activity:
setTheme(R.style.AppThemeChristmas);
Intent intent = getIntent();
finish();
startActivity(intent);
添加回答
舉報(bào)