2015-05-26 44 views
3

我的代碼關閉聲音整個應用程序如何關閉的切換按鈕點擊聲音整個應用程序

<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

當用戶改變聲音按鈕,爲什麼不使用sharedpreferences的值設置爲yes,然後你在哪裏都使用聲音只是檢查聲音值是否?這是持久的,應該可以正常工作嗎?可能只需要一些編碼。 – Smashing

+0

我已經這樣做了,請檢查更新後的問題。 –

+0

@Garima - 在setTheme()之後調用recreate() – Pankaj

回答

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); 
     } 
    } 
}); 
+0

用戶希望根據切換按鈕的狀態禁用整個應用程序的聲音效果,而不是您在此處回答的切換按鈕。在回答之前請正確地閱讀問題。 –

+0

@Alok正好,但我們怎麼能實現這 –

0

可能的解決方法爲您的需求是定義在styles.xml兩個主題,一個與<item name="android:soundEffectsEnabled">false</item>和一個與<item name="android:soundEffectsEnabled">true</item>。然後在切換按鈕的setOnCheckedChangeListener方法中,相應地設置您的應用程序主題。您可以在這裏實現更改主題Change application theme,也可以通過在Google上搜索來以編程方式更改主題。

希望這有助於:)

+0

我試過這個解決方案,但它不工作。 setTheme()方法在運行時不會更改主題。 –

+0

您必須重新創建當前活動才能將更改應用到主題。另外對於後退棧中的其他活動,您必須完全重新創建堆棧中的活動,只有這些更改纔會反映在其中。 –

+0

另外,如果您正在使用這種技術,那麼在每個活動中都使用切換按鈕檢查您的主題首選項狀態設置,並在調用setContentView之前初始化相應的主題。 –

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 
    } 
+0

早些時候嘗試過。 –

+0

對不起,我必須把行重新創建()在你的切換監聽器onClick方法後,如果其他條件 – Pankaj

+0

找到的解決方案。 –

相關問題