2013-02-16 14 views
42

Eclipse'de Jelly Bean'i hedef alan yeni bir uygulama oluşturdum. Bu otomatik olarak oluşturulmuş koddur. tezahür setleri AppName uygulama tema: Değerler dir stilleri için AppBaseTheme çevirirAndroid Dialog teması çok hafif simge yapıyor

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    . . . 

:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 

    <!-- 
     Base application theme, dependent on API level. This theme is replaced 
     by AppBaseTheme from res/values-vXX/styles.xml on newer devices. 
    --> 
    <style name="AppBaseTheme" parent="android:Theme.Light"> 
     <!-- 
      Theme customizations available in newer API levels can go in 
      res/values-vXX/styles.xml, while customizations related to 
      backward-compatibility can go here. 
     --> 
    </style> 

    <!-- Application theme. --> 
    <style name="AppTheme" parent="AppBaseTheme"> 
     <!-- All customizations that are NOT specific to a particular API-level can go here. --> 
    </style> 

</resources> 

Ve değerlere V14/styles.xml geçerli:

<resources> 

    <!-- 
     Base application theme for API 14+. This theme completely replaces 
     AppBaseTheme from BOTH res/values/styles.xml and 
     res/values-v11/styles.xml on API 14+ devices. 
    --> 
    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
     <!-- API 14 theme customizations can go here. --> 
    </style> 

</resources> 

Daha sonra, çıkmadan önce bir onay iletişim kutusu oluşturdum:

case R.id.menu_quit: 
     new AlertDialog.Builder(this) 
     .setIcon(android.R.drawable.ic_dialog_alert) 
     .setTitle(R.string.confirm_title) 
     .setMessage(R.string.confirm_text) 
     .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       finish();  
      } 

Ve çıkan diyalog kutusudur:

resulting dialog box

Neden ic_dialog_icon çok hafif? Bu zorlukla görülebilir. Tüm varsayılanları kullanıyorum, temayı veya herhangi bir rengi değiştirmedim, Sistem arka planına daha fazla kontrastlı bir simge seçmesin mi? Bunu nasıl düzeltebilirim? Tomik bilgi takiben düzeltme
ile

Düzenleme ben android.R.attr.alertDialogIcon belgelerine okuyup

 new AlertDialog.Builder(this) 
     .setIconAttribute(android.R.attr.alertDialogIcon) 
     .setTitle(R.string.confirm_title) 
     .setMessage(R.string.confirm_text) 
     .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
(setIconAttribute() ile değiştirilmesi setIcon()) Bu düzeltmeyi yaptı

Şimdi diyalog şöyle görünür:

enter image description here

cevap

43

Sorun şu ki, özel kaynak android.R.drawable.ic_dialog_alert kullanıyor olmanızdır.

Özel kaynakları kullanmak sorunlu olabilir, farklı aygıtlarda değişiklik gösterebilir ve hatta bunların tüm aygıtlarda bulunduğundan emin olamazsınız. En iyi özel kaynakları kullanmaktan kaçınmaktır. Onlara ihtiyacınız varsa, bunları Android kaynaklarından kopyalayıp bunları projenizin kaynaklarına yerleştirmelisiniz.

Kaynağınızın fazla beyaz olmasının nedeni, standart (Holo dışı) teması için kullanılan kaynağı (android.R.drawable.ic_dialog_alert) kullanmanızdır.
Ancak, Android 4.x (API level 14) çalıştıran cihazlar için normalde farklı kaynak kullanan Holo teması (android:Theme.Holo.Light.DarkActionBar) kullanıyorsunuz.

Holo temalı varsayılan uyarı simgesi, karanlık tema için android.R.id.ic_dialog_alert_holo_dark veya ışık teması için android.R.id.ic_dialog_alert_holo_light şeklindedir (sizin durumunuz, bu kaynağı kullanmalısınız).

Not: API düzeyi 11'den itibaren geçerli tema için varsayılan uyarı iletişim simgesini gösteren android.R.attr.alertDialogIcon özniteliği vardır. Kodunuzda bunu şu şekilde kullanabilirsiniz:

case R.id.menu_quit: 
    new AlertDialog.Builder(this) 
    .setIconAttribute(android.R.attr.alertDialogIcon) 
    .setTitle(R.string.confirm_title) 
    .setMessage(R.string.confirm_text) 
    .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      finish();  
     } 

Hala olduğu simgesi her zaman aynı bakacağız emin olmak için tek yol bu çünkü projenizin kaynaklarına Android kaynaklardan kaynak kopyalamak için önerilir.Eğer çok bu cihazlara ışık temasını kullanıyorsanız

+0

Ben bilgi okumak ve kodunu çözmek. Soruyu yansıtacak şekilde kısa bir süre sonra güncelleyeceğim. ::: BTW Simgelerin her zaman aynı görünmeleri, sadece görünür olmaları gerektiği konusunda endişelenmiyorum. – ilomambo

+0

Bilgi diyaloğu nedir? benzer '.setIconAttribute (android.R.attr. ????) var mı ' ' '.setIcon (android.R.drawable.ic_dialog_info) yerine kullanılacak – JFar

1

Önceden HC için Tomik's answer dayalı workround: Yorumlarınız ardından

AlertDialog.Builder builder = ...; 
if (VERSION.SDK_INT < VERSION_CODES.HONEYCOMB) { 
    Drawable icon = ContextCompat.getDrawable(context, android.R.drawable.ic_dialog_alert).mutate(); 
    icon.setColorFilter(new ColorMatrixColorFilter(new float[] { 
      -1, 0, 0, 0, 255, // red = 255 - red 
      0, -1, 0, 0, 255, // green = 255 - green 
      0, 0, -1, 0, 255, // blue = 255 - blue 
      0, 0, 0, 1, 0  // alpha = alpha 
    })); 
    builder.setIcon(icon); 
} else { 
    builder.setIconAttribute(android.R.attr.alertDialogIcon); 
}