Android Dialogue thème fait l'icône de trop de lumière
J'ai créé une nouvelle application dans Eclipse, ciblée à Jelly Bean. Tout ceci est créé automatiquement le code. Le manifeste définit l'application thème de AppName:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
. . .
qui se traduit par AppBaseTheme pour les styles dans les valeurs dir:
<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>
Et values-v14/styles.xml est:
<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>
Ensuite, j'ai créé une boîte de dialogue de confirmation avant de quitter:
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();
}
Et de la boîte de dialogue résultante est:
Pourquoi le ic_dialog_icon si léger? Il est à peine visible. Je suis à l'aide de tous les paramètres par défaut, je n'ai pas modifier le thème ou les couleurs, ne pas le système de sélection d'une icône avec plus de contraste à son arrière-plan? Comment puis-je résoudre ce problème?
Modifier avec fix
Suivant Tomik info, j'ai lu la documentation de android.R.attr.alertDialogIcon et fait de ce correctif ( remplacé setIcon() avec setIconAttribute() )
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() {
Maintenant la boîte de dialogue ressemble à ceci:
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que vous êtes en utilisant des ressources privées,
android.R.drawable.ic_dialog_alert
.À l'aide de ressources privées est problématique, ils peuvent varier sur différents appareils et vous ne pouvez même pas être sûr qu'ils sont présents sur tous les appareils. Le mieux est d'éviter d'utiliser des ressources privées. Si vous avez besoin d'eux, vous devez les copier à partir d'Android sources et de les mettre dans les ressources de votre projet.
La raison exacte de votre ressource est trop blanc, c'est que vous êtes en utilisant des ressources (
android.R.drawable.ic_dialog_alert
) qui est utilisé pour le standard (non-Holo) thème.Mais pour les appareils fonctionnant sous Android 4.x (niveau API 14) vous utilisez Holo thème (
android:Theme.Holo.Light.DarkActionBar
) qui est normalement à l'aide de différentes ressources.Avec Holo thème par défaut l'icône d'alerte est
android.R.id.ic_dialog_alert_holo_dark
pour le thème sombre ouandroid.R.id.ic_dialog_alert_holo_light
pour le thème de la lumière (votre cas, vous devriez utiliser cette ressource à la place).Remarque: Depuis l'API de niveau 11 il y a un attribut
android.R.attr.alertDialogIcon
qui se réfère à la valeur par défaut de dialogue d'alerte de l'icône pour le thème actuel. Dans votre code, vous pouvez l'utiliser de cette façon:Encore je vous recommande de copier la ressource à partir d'Android sources de ressources de votre projet parce que c'est la seule façon vous pouvez être sûr que l'icône est toujours le même aspect.
.setIconAttribute(android.R.attr.????)
à utiliser à la place de.setIcon(android.R.drawable.ic_dialog_info)
Contourner basé sur Tomik réponse pour le pré-HC si vous utilisez le thème de la lumière sur ces appareils: