2010-09-27 4 views
4

J'utilise une boîte de dialogue personnalisée qui contient un champ de texte, une image et un bouton. Le texte peut contenir du HTML. Parfois, le bas de la boîte de dialogue est coupé du bas lorsque le texte est assez long. Comment puis-je empêcher cela? Je veux Android pour déterminer la taille de la boîte de dialogue, mais il ne semble pas le faire. Ai-je besoin de dimensionner le dialogue moi-même dans ce cas?Android ne pas dimensionner la boîte de dialogue personnalisée assez grande

est ici la mise en page ...

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/alert_root_incorrect" 
    style="@style/AlertDialogTheme" 
    android:background="@drawable/rounded_alert" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
> 
    <LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/rounded_alert" 
    > 

    <TableLayout 
     android:stretchColumns="0" 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
    > 

     <TableRow> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="left" 
      android:textStyle="bold" 
      android:text="Sorry, that's wrong!" 
      android:textColor="@color/gray_dark" /> 

     <ImageView 
      android:id="@+id/check" 
      android:background="@drawable/xmark" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:layout_marginRight="10dp" /> 

     </TableRow> 
    </TableLayout> 

    <TextView 
     android:id="@+id/alert_text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:ellipsize="none" 
     android:text="In fact, this is where the explanation will go. Something about how this passage related to the topic" 
     android:textColor="#000000" /> 

    <Button 
     android:id="@+id/okay_button" 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_gravity="center_horizontal" 
     android:background="@drawable/rounded_alert_button" 
     android:text="Okay" 
     android:textColor="@color/white" 
     android:textSize="20sp" /> 
    </LinearLayout> 
</LinearLayout> 

Et voici le code que je utilise pour le charger ...

if (null == layout) { 
    this.layout = inflater.inflate(R.layout.alert_incorrect, (ViewGroup) findViewById(R.id.alert_root_incorrect)); 
} 

TextView message = (TextView) layout.findViewById(R.id.alert_text); 
message.setText(Html.fromHtml(card.getConclusion())); 
((Button) layout.findViewById(R.id.okay_button)).setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     dismissDialog(INCORRECT_DIALOG); 
     nextQuestion(); 
    } 
}); 

layout.requestLayout(); 

dialog = new Dialog(this, R.style.AlertDialogTheme); 
dialog.setContentView(layout); 
dialog.setCancelable(false); 

return dialog; 

Et ici est un clin d'oeil de ce que je veux dire ..

alt text

Merci,

John

+1

Il se peut que le 'style' que vous avez sélectionné comporte des contraintes de taille, ce qui empêche le dimensionnement de votre boîte de dialogue. Essayez sans style et voyez s'il y a une différence. Un 'LinearLayout' avec' layout_weight' est plus facile que 'TableLayout', et pourquoi y at-il deux' LinearLayout' imbriqués dont vous n'avez besoin que d'un. Éliminer les vues «supplémentaires» comme cela si possible, ils peuvent interférer avec la mise en page. J'ai également eu du mal à dimensionner 'Button's en réglant également' textSize'. Vous pouvez essayer de supprimer le remplissage de 'Button'. Si votre arrière-plan est un patch 9, il peut également y avoir des problèmes avec les paramètres de marge. –

Répondre

1

Ce n'est pas parfait mais je l'ai corrigé en définissant la disposition de la boîte de dialogue par rapport à l'affichage par défaut.

dialog = new Dialog(this, R.style.AlertDialogTheme); 
dialog.setContentView(layout); 
Window window = dialog.getWindow(); 
window.setLayout(
    (int)(window.getWindowManager().getDefaultDisplay().getWidth() * .90), 
    (int)(window.getWindowManager().getDefaultDisplay().getHeight() * .90)); 

dialog.setCancelable(false); 

Ajustez simplement les valeurs ".90" jusqu'à ce que vous vous sentiez à l'aise.

+0

A travaillé parfait pour moi .. –

0

Voici la solution:

  1. Vous devez ajouter un LinearLayout à l'extérieur du fichier xml de votre boîte de dialogue
  2. Réglez ensuite cette gravité de LinearLayout comme « centre »
  3. la dernière étape consiste à créer un LayoutParams et définissez-le sur la boîte de dialogue

    android.view.WindowManager.LayoutParams lp = new android.view.WindowManager.LayoutParams(); lp.width = android.view.WindowManager.LayoutParams.FILL_PARENT; lp.height = android.view.WindowManager.LayoutParams.FILL_PARENT; alertDialog.getWindow(). SetAttributes (lp);

Questions connexes