2013-07-25 2 views
0

У меня есть немного настройки в моем style.xml:Android предотвратить стиль деятельности от применяются к alertdialogs

<style name="AppBaseTheme" parent="android:Theme.Holo.Light.NoActionBar"></style> 

    <!-- Application theme. --> 
    <style name="AppTheme" parent="AppBaseTheme"> 
     <item name="android:background">@color/light_grey</item> 
     <item name="android:textColor">@color/white</item> 
    </style> 

Теперь моделирование правильно применен к моей деятельности.

Но когда я создаю alertdialog, цвет фона применяется к названию и телу диалога, чего я не хочу. Я хочу, чтобы alertdialog оставался на своем складе.

Вот alertdialog:

AlertDialog.Builder builder = new AlertDialog.Builder(context); 
      builder.setTitle("Wtitle").setMessage("message"); 
      builder.setNeutralButton("ok", null); 
      builder.show(); 

Может кто-нибудь помочь?

+0

Вы применили AppBaseTheme к приложению, а не к действиям? – sandrstar

ответ

0

Там в рабочем растворе - использовать другой AlertDialog.Builder конструктор с темой, как описано в the documentation, идея в основном приходят из этого "How to change theme for AlertDialog":

  • Там одна странная вещь в вашем styles.xml: приложение тема определяет android:background вместо android:windowBackground. Кажется, нет оснований для этого, потому что если вам нужен тот же фон для , все просмотров (что, я сомневаюсь, возможно), то у вас может быть какая-то базовая тема для просмотров. Я думаю, что помешать темам приложений и темам просмотров в основном не очень хорошая идея, потому что приложение нуждается в совершенно разных атрибутах. Итак, давайте сделаем это следующим образом:

    <resources> 
        <style name="AppBaseTheme" parent="android:Theme.Holo.Light.NoActionBar"></style> 
    
        <!-- Application theme. --> 
        <style name="AppTheme" parent="AppBaseTheme"> 
         <item name="android:windowBackground">@color/light_grey</item> 
         <item name="android:textColor">@color/white</item> 
        </style> 
    </resources> 
    
  • Dialog Builder должен быть создан с помощью своей собственной темы:

    AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, android.R.style.Theme_Dialog)); 
    

    Здесь необходимо принять во внимание, что по какой-то причине, конструктор AlertDialog.Builder (Context context, int theme) не делает это правильно, и ContextThemeWrapper необходимо (похоже, это потому, что не все свойства находятся в теме, а тема «воссоздается» только с использованием ContextThemeWrapper).

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