2009-10-08 5 views
1

Je veux avoir une boîte de dialogue contenant 3 vues 1. titre avec fond noir 2. du corps du texte fond blanc 3. une ligne avec 2 boutons avec un fond gris. Le problème est que je veux que la couleur de fond du corps soit BLANCHE, mais même ma vue a défini backgroundcolor sur BLANC, il semble y avoir des marges en haut et en bas du corps qui ont une couleur de fond différente.Comment puis-je optimiser ce code de dialogue pour Android?

 TextView title = new TextView(this); 
    title.setText("This is my title"); 
    title.setBackgroundColor(Color.BLACK); 
    title.setPadding(10, 10, 10,10); 
    title.setGravity(Gravity.CENTER); 
    title.setTextColor(Color.WHITE); 
    title.setTextSize(20); 

    TextView view = new TextView(this); 
    view.setText("Lorem Ipsum blabla bla \n more bla bla aha hhahah blablalblal."); 
    view.setBackgroundColor(Color.WHITE); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setCancelable(false); 
    builder.setCustomTitle(title); 
    builder.setView(view); 
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        Bingo.this.finish(); 
       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
    ((View)view.getParent()).setBackgroundColor(Color.WHITE); // <-- UGLY fix to avoid stupid margins at top and bottom of the body... 

Des idées comment je peux supprimer la dernière ligne du code le "correctif UGLY"?

+0

Juste une question préliminaire Une raison de ne pas utiliser les vues XML? –

+0

le titre est une vue personnalisée parce que je ne veux pas d'icône, la vue de message personnalisé est faite parce que je veux avoir des URL dans le texte, donc je dois définir le view.setAutoLinkMask (Linkify.ALL) pour le faire, car son non pris en charge par le constructeur. Quoi qu'il en soit, ce setAutoLinkMask n'a pas fonctionné comme je l'avais supposé pour certaines raisons de strage, donc j'ai dû utiliser une vue gonflée View.inflate (R.layout.my_message_view, null) pour faire fonctionner l'autolinking ... Geee ... pourquoi tout doit être si difficile ... –

Répondre

5

Pour résoudre le problème de couleur de fond, je viens mis

builder.setInverseBackgroundForced(true); 

donc mon code complet est

View view = View.inflate(this, R.layout.tos_dialog, null); 

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setCancelable(false); 
builder.setIcon(R.drawable.icon); 
builder.setTitle("Bla bla title"); 
builder.setView(view); 
builder.setInverseBackgroundForced(true); 
builder.setPositiveButton("I agree", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      dialog.dismiss(); 
     } 
    }); 
builder.setNegativeButton("I don't agree", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
      Bingo.this.finish(); 
     } 
    }); 
AlertDialog alert = builder.create(); 
alert.show(); 

et le xml gonflé pour la vue avec le texte avec liens automatiques

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/root" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:padding="10px" 
android:textColor="#000" 
android:gravity="left" 
android:textSize="14px" 
android:background="#FFF" 
android:autoLink="all" 
android:textColorLink="#00F" 
android:text="bla bla http://stackoverflow.com is cool, bla bla." 
/> 
Questions connexes