2015-05-26 2 views
3

У меня есть строка кода для выключают звука для всего приложенияКак отключить звук на кнопку переключения мыши для всего приложения

<item name="android:soundEffectsEnabled">false</item> 

И это прекрасно работает, но я хочу, чтобы включить звук Включение/выключение нажмите кнопку переключения.

Итак, кто-нибудь предложит мне, что я могу сделать для изменения темы во время выполнения для всего приложения.

EDIT: ОБНОВЛЕНО КОД

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

     } 
    }); 

Изменить тему в Application Class

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, чтобы установить значение да, когда пользователь изменяет кнопки звукового сигнала, а затем где-либо использовать звук просто проверьте, является ли звуковое значение да ?. Это настойчиво и должно работать нормально? может просто взять некоторую кодировку. – Smashing

+0

Я уже сделал это, пожалуйста, проверьте обновленный вопрос. –

+0

@Garima - Call rereate() после setTheme() – 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 кнопки toggle задайте соответствующую тему приложения. Вы можете получить реализацию меняющейся темы здесь Change application theme или можете найти множество других примеров, чтобы изменить тему программно, выполнив поиск в Google.

Надеется, что это помогает :)

+0

Я пробовал это решение, но его не работало. Метод setTheme() не изменяет тему во время выполнения. –

+0

Вы должны воссоздать текущую деятельность, чтобы применить изменения к теме. Также для других действий в фоновом стеке вы должны полностью воссоздать действия в стеке, только тогда изменения будут отражены в них. –

+0

Также, если вы используете эту технику, тогда в каждом действии проверьте состояние настройки темы, используя кнопку toggle и инициализируя соответствующую тему там, прежде чем вызывать 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

Извините, мой плохой вам нужно поместить линию rereate() в ur, чтобы переключить прослушиватель onClick после того, как else else – Pankaj

+0

Найдено решение. –

Смежные вопросы