2 回答

TA貢獻1815條經驗 獲得超6個贊
使用屬性值設置顏色
例如,這是 textview 的顏色
<attr name="textviewcolor" format="color"></attr>
在 style.xml 中為不同的主題選擇創建不同的樣式
這是深色主題樣式的文本顏色
<style name="AppTheme.Dark" parent="Theme.AppCompat.Light.NoActionBar"><item name="textviewcolor">#fff</item></style>
這是默認主題樣式的文本顏色
<style name="AppTheme.Defult" parent="Theme.AppCompat.Light.NoActionBar"><item name="textviewcolor">#000</item></style>
使用此屬性值(textviewcolor)到textview來設置顏色,如下所示
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="text" android:textColor="?attr/textviewcolor"/>
您只需在按鈕單擊中更改共享首選項中的主題名稱并刷新活動,其余的事情將在下面提到您將如何做到這一點..
首先像這樣創建主題util類
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;
}}
建議:使用共享首選項來指定主題的名稱
然后創建一個抽象類,通過擴展該類將主題設置為所有活動
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));
} }}}
最后:在要更改主題的活動中使用 ChangethemeActivity而不是 AppCompatActivity
這是我實現應用程序主題更改功能的方式,請告訴我這是否解決了您的問題

TA貢獻1963條經驗 獲得超6個贊
創建一個基本活動并從中擴展所有其他活動,然后在基本活動的 onCreate 方法中設置主題,例如:
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;
}
然后,當您想要更改主題時,只需在 theme 中設置另一個主題資源 id 并重新啟動您的 Activity:
setTheme(R.style.AppThemeChristmas);
Intent intent = getIntent();
finish();
startActivity(intent);
添加回答
舉報