我有完整应用关闭声音的代码行
<item name="android:soundEffectsEnabled">false</item>
它工作正常,但我想通过点击切换按钮打开/关闭声音。
所以任何人都建议我在运行时可以为整个应用程序做些什么来改变主题。
编辑:更新代码
mToggleBtnSound.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
boolean on = ((ToggleButton) v).isChecked();
if (on) {
// Change Whole App Theme
MyApplication.changeToTheme(getApplicationContext(), MyApplication.THEME_SOUND_ON);
//Save state of toggle button yes or no
MyApplication.getAppliation().getDeviceResourceHandler()
.addToSharedPref(Constant.SHARED_PREF_IS_SOUND_ON, true);
} else {
MyApplication.changeToTheme(getApplicationContext(), MyApplication.THEME_SOUND_OFF);
MyApplication.getAppliation().getDeviceResourceHandler()
.addToSharedPref(Constant.SHARED_PREF_IS_SOUND_ON, false);
}
}
});
将主题更改为应用程序类
package com.my.app;
import android.content.Context;
import com.my.app.MyApplication;
public class MyApplication extends Application {
private static int sTheme;
public final static int THEME_SOUND_ON = 0;
public final static int THEME_SOUND_OFF = 1;
@Override
public void onCreate() {
super.onCreate();
}
public static void changeToTheme(Context context, int theme) {
sTheme = theme;
switch (sTheme) {
default:
case THEME_SOUND_ON:
context.setTheme(R.style.AppSoundOnTheme);
break;
case THEME_SOUND_OFF:
context.setTheme(R.style.AppSoundOffTheme);
break;
}
}
}
答案 0 :(得分:1)
您的要求的可能解决方法是在styles.xml中定义两个主题,一个使用<item name="android:soundEffectsEnabled">false</item>
,另一个使用<item name="android:soundEffectsEnabled">true</item>
。然后在切换按钮的setOnCheckedChangeListener方法中,相应地设置应用程序主题。您可以在Change application theme获得更改主题的实现,或者也可以通过在Google上搜索来找到许多其他以编程方式更改主题的示例。
希望这会有所帮助:)
答案 1 :(得分:0)
如果我的理解是正确的,这应该会帮助你。
ToggleButton tbtn=(ToggleButton)findViewById(id);
tbtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if (isChecked) {
// Sound is disabled
tbtn.setSoundEffectsEnabled(false);
} else {
// Sound is enabled
tbtn.setSoundEffectsEnabled(true);
}
}
});
答案 2 :(得分:0)
可以通过以下方法解决您的问题变更
public static void changeToTheme(Context context, int theme) {
sTheme = theme;
switch (sTheme) {
default:
case THEME_SOUND_ON:
context.setTheme(R.style.AppSoundOnTheme);
break;
case THEME_SOUND_OFF:
context.setTheme(R.style.AppSoundOffTheme);
break;
}
recreate(); //put this line in your code
}