2011-10-26 1 views
1

essayé de comprendre cela pour un certain temps maintenant:vue personnalisée en utilisant onCreateView dans un DialogFragment

Je suis en train de créer une boîte de dialogue personnalisée en utilisant l'approche standard indiquée sur le Dev site.

public class CustomDialog extends DialogFragment {  
    private OnDialogResultListener mOnDialogResultListener = null; 
    public void setOnDialogResultListener(OnDialogResultListener dialogResultListener) { 
     mOnDialogResultListener = dialogResultListener; 
    } 

    public static CustomDialog newInstance(OnDialogResultListener dialogResultListener) { 
     CustomDialog frag = new CustomDialog();   
     frag.setOnDialogResultListener(dialogResultListener); 
     return frag; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     getDialog().setTitle(getString(R.string.Dialog_CustomDialog_Title)); 
     View v = inflater.inflate(R.layout.customdialog, container, false); 
     return v; 
    } 
} 

Avec l'être XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_height="fill_parent" android:background="@color/white" android:layout_margin="0px" android:layout_width="fill_parent"> 
    <EditText android:hint="@string/Dialog.CustomDialog.OldPassword" android:layout_marginBottom="@dimen/normalMargin" android:layout_height="wrap_content" android:inputType="textPassword" android:id="@+id/EditText02" android:layout_width="fill_parent"></EditText> 
    <EditText android:hint="@string/Dialog.CustomDialog.NewPassword" android:layout_height="wrap_content" android:inputType="textPassword" android:id="@+id/EditText01" android:layout_width="fill_parent"></EditText> 
    <EditText android:hint="@string/Dialog.CustomDialog.RetypePassword" android:layout_height="wrap_content" android:inputType="textPassword" android:id="@+id/editText1" android:layout_width="fill_parent"> 
     <requestFocus></requestFocus> 
    </EditText> 
    <LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout1" android:layout_width="fill_parent"> 
     <Button android:layout_height="wrap_content" android:text="@string/save" android:layout_width="@dimen/normalButtonWidth" android:id="@+id/btn_Custom_save"></Button> 
     <Button android:layout_height="wrap_content" android:text="@string/cancel" android:layout_width="@dimen/normalButtonWidth" android:id="@+id/btn_Custom_cancel"></Button> 
    </LinearLayout> 
</LinearLayout> 

Et après avoir créé et montrant la boîte de dialogue, il ne me reste: enter image description here

Le fond blanc a été appliqué à mettre l'accent sur l'inattendu et comportement indésirable.

Des idées? J'ai essayé de changer la largeur/hauteur, en utilisant des poids dans un LinearLayout horizontal, en réglant la largeur/hauteur par programme - tout en vain.

Répondre

1

J'ai trouvé une solution bon marché, que je préférerais ne pas utiliser. L'ajout d'une hauteur 0px, d'une vue de largeur de 2000dp (un nombre énorme) n'importe où dans la mise en page l'amène à remplir le cadre de la boîte de dialogue.

0

Avec le DialogFragment, la largeur et la hauteur sont nulles. Créez un groupe de sous-vue supplémentaire avec fill parent et cela devrait fonctionner pour vous.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"> 

     <LinearLayout android:orientation="vertical" 
    android:layout_height="fill_parent" android:background="@color/white" android:layout_margin="0px" android:layout_width="fill_parent"> 

.....

+0

Je vais vérifier ceci une fois que je me serai rendu compte et que je vous donnerai du crédit si cela fonctionne :) –

0

Si vous définissez attachToRoot = true pendant inflater.inflate il doit montrer de dialogue correctement.

View v = inflater.inflate(R.layout.customdialog, container, true); 
+0

Je vais essayer de tester ceci (et Sra) et marquer une réponse en conséquence - le problème est que je sais avoir accès au code avec lequel je travaillais. Mais un test simple ne devrait pas prendre trop de temps à jeter ensemble. –

2

J'ai trouvé ce tricks:.. getDialog() getWindow() setBackgroundDrawableResource (R.color.white);

On dirait une meilleure solution.

0

J'ai utilisé un relatifLayout comme vue racine dans mon cas et il a rempli les fenêtres de dialogue.

Questions connexes