2015-08-07 2 views
1

Я новичок в Android, у меня есть две тема в моем разрешении/style.xml один файл является Theme.Transparent и еще один AppTheme. Моим требованием я должен изменить тему активности, когда пользователь выбирает действия кнопки.Android как изменить тему в деятельности

Как установить темы в файле res/style.xml. Я попытался следующие

changeTheme.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     super.theme(......); // 
    } 
}); 

super.theme метод не принимает мои темы от разрешения/style.xml файла?

ответ

1

Изменение темы активности, установив его перед вызовом супер OnCreate:

setTheme(R.style.Theme); 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_layout); 

В On нажмите перезапустить вашу деятельность, чтобы применить изменения:

activity.finish(); 
activity.startActivity(new Intent(activity, activity.getClass())); 
0

Вы можете попробовать

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 

     super.onCreate(savedInstanceState); 
     setTheme(android.R.style.Theme_Holo_Light_DarkActionBar); 
     setContentView(R.layout.activity_main); 
    } 

Чтобы изменить тему при нажатии кнопки, вы можете обратиться к следующему коду:

public static void changeTheme(final Context context) { 

     int intCurrentTheme = getTheme(); 

       final Dialog dialog = new Dialog(context); 
     dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON); 
     dialog.setContentView(R.layout.dialog_theme); 
     dialog.setTitle(R.string.titletheme); 
     dialog.show(); 


     dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, 
       R.drawable.ic_theme); 

     final RadioGroup radioGroup = (RadioGroup) dialog.findViewById(R.id.radioGroup); 

     switch (intCurrentTheme){ 
      case android.R.style.Theme_Holo_Light_DarkActionBar: 
       radioGroup.check(R.id.radio_theme_holo_light_darkactionbar); 
       break; 
      case android.R.style.Theme_Holo_Light: 
       radioGroup.check(R.id.radio_theme_holo_light); 
       break; 
      case android.R.style.Theme_Holo: 
       radioGroup.check(R.id.radio_theme_holo); 
       break; 
     } 

     Button btnSaveTheme = (Button) dialog.findViewById(R.id.btnSaveTheme); 
     Button btnCancelTheme = (Button) dialog.findViewById(R.id.btnCancelTheme); 

     btnSaveTheme.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       int intSelectedId = radioGroup.getCheckedRadioButtonId(); 
       int intNewTheme; 
       switch (intSelectedId){ 
        case R.id.radio_theme_holo_light_darkactionbar: 
         intNewTheme = android.R.style.Theme_Holo_Light_DarkActionBar; 
         break; 
        case R.id.radio_theme_holo_light: 
         intNewTheme = android.R.style.Theme_Holo_Light; 
         break; 
        case R.id.radio_theme_holo: 
         intNewTheme = android.R.style.Theme_Holo; 
         break; 
        default: 
         intNewTheme = android.R.style.Theme_Holo_Light_DarkActionBar; 
       } 

       savePreference(context, "themePref", intNewTheme); 
       dialog.dismiss(); 


     //Reload main activity        
       Intent intent = new Intent(context, MainActivity.class); 
       context.startActivity(intent); 

      } 
     }); 

     btnCancelTheme.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       dialog.dismiss(); 
      } 
     }); 
    } 
1

Это нормально, чтобы изменить его:

context.setTheme(android.R.style.Theme_Holo_Light) 

По умолчанию Theme_Holo.

+2

Пожалуйста, напишите свой ответ на английском языке! –

+0

Мой английский не очень хорошо, боюсь, вы не понимаете. –

+0

Мой английский - с помощью перевода, но мне нравится английский. –

0

У вас есть воссоздают деятельность, чтобы изменить текущую тему динамически,

public class MainActivity extends AppCompatActivity { 

    static int currentTheme = 0; 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if (currentTheme == 0) { 
      setTheme(R.style.AppTheme); 
     } else { 
      setTheme(R.style.AppTheme1); 
     } 

     Button button = new Button(this); 
     button.setText("AppTheme1"); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       currentTheme = 1; 
       recreate(); 
      } 
     }); 


     setContentView(button); 
    } 
}