我在编程设置"主题切换器"时遇到了一些困难。我想从应用程序切换主题(在白色(Theme.Light.NoTitleBar)和深色(Theme.Black.NoTitleBar)之间),我所做的是:我设置了SharedPreference:
final String PREFS_NAME = "MyPrefsFile";
final SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
final SharedPreferences.Editor editor = settings.edit();
然后我有两个按钮来切换主题(第二个几乎相同)
Button ThemeWhite = (Button) findViewById(R.id.ThemeWhite);
ThemeWhite.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
editor.putBoolean("Theme", false);
editor.commit();
System.exit(2);
}
});
在每个活动的乞求中,我检查SharedPreference
boolean theme = settings.getBoolean("Theme", false);
if(theme){
this.setTheme(R.style.Theme_NoBarBlack);
} else{
this.setTheme(R.style.Theme_NoBar);
}
setContentView(R.layout.aplikacja);
我在文件夹值中的styles.xml文件中定义主题:
<resources>
<style name="Theme.NoBar" parent="@android:style/Theme.Light.NoTitleBar" />
<style name="Theme.NoBarBlack" parent="@android:style/Theme.NoTitleBar" />
值-v11:
<resources>
<style name="Theme.NoBar" parent="@android:style/Theme.Holo.Light.NoActionBar" />
<style name="Theme.NoBarBlack" parent="@android:style/Theme.Holo.NoActionBar" />
值-v14:
<resources>
<style name="Theme.NoBar" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar" />
<style name="Theme.NoBarBlack" parent="@android:style/Theme.DeviceDefault.NoActionBar" />
清单文件:
<application
...
android:theme="@style/Theme.NoBar" >
在android>4.0上一切都很好,但当我使用2.2时,它不会改变主题-只是字体变白了,但没有深色背景。
我试着检查它是否至少有效,并更改了Theme.NoBarBlack的值(适用于android<3.0),其值与Theme.NeBar相同,然后当我按下按钮时,字体没有更改-这是应该做的。
编辑(发现问题):因此,经过尝试,在Android 2.2 Manifest文件上设置Background和rest,并通过编程更改主题只影响文本颜色。知道为什么会这样吗?
答案(因为我没有10个声誉):在android上<3.0如果
super.onCreate(savedInstanceState);
是否在设置主题之前。
所以应该是:
public void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Theme_NoBar);
super.onCreate(savedInstanceState);
setContentView(R.layout.lista);
}
抱歉,伙计们无中生有,但当它在>3.0上运行时,我很困惑。花半天时间在上面,但要努力。:)
您的styles.xml中有一个错误:对于Theme.NoBarBlack
,您将父级设置为@android:style/Theme.NoActionBar
,但它不存在。
我想你是指@android:style:Theme.NoTitleBar
。