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);
添加回答
举报