2017-06-23 1 views
0

Voici mon fichier xml pour mon dialogueAlertDialog n'envelopper le contenu, peu importe ce que j'essaie

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:id="@+id/main" 
android:paddingTop="23dp" 
android:background="@android:color/white"> 

<ImageView 
    android:id="@+id/officer" 
    android:layout_width="47dp" 
    android:layout_height="47dp" 
    android:layout_marginLeft="24dp" 
    android:background="@drawable/officerman"/> 
<TextView 
    android:id="@+id/text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Are you sure you want\nto sign out?" 
    android:textSize="15.5dp" 
    android:textColor="#1C86FF" 
    android:layout_marginTop="4dp" 
    android:lineSpacingExtra="2dp" 
    android:layout_marginLeft="84dp"/> 

<LinearLayout 
    android:layout_marginTop="20dp" 
    android:layout_width="264dp" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="1" 
    android:layout_below="@id/officer"> 

    <Button 
     android:id="@+id/yes" 
     android:layout_width="wrap_content" 
     android:layout_weight="0.5" 
     android:layout_height="42dp" 
     android:background="#1C86FF" 
     android:text="Yes" 
     android:textAllCaps="false" 
     android:textSize="15dp" 
     android:textColor="@android:color/white"/> 

    <Button 
     android:id="@+id/no" 
     android:layout_width="wrap_content" 
     android:layout_weight="0.5" 
     android:layout_height="42dp" 
     android:background="#0078FF" 
     android:textSize="15dp" 
     android:textColor="@android:color/white" 
     android:textAllCaps="false" 
     android:text="No"/> 

</LinearLayout> 

</RelativeLayout> 

Voici mon code java

AlertDialog.Builder build = new AlertDialog.Builder(Login.this); 
    View lview = getLayoutInflater().inflate(R.layout.dialog_leave,null); 
    build.setView(lview); 
    AlertDialog dialog = build.create(); 
    dialog.show(); 

La taille alertdialog n'enveloppait à mon contenu, peu importe ce que j'essaie. Cela finit comme ça. Il ajoute de l'espace à droite pour l'amener à une certaine taille.

Click on this to see the image. It adds extended space to the right see to get it to the default alertdialog size

J'ai essayé d'utiliser getWindow.setLayout(width,height) en pixels, mais c'est trop d'une douleur, il doit y avoir une meilleure façon de le faire. J'ai aussi essayé getWindow.setLayout(Relative.LayoutParams.WRAP_CONTENT, ...), et la même chose se produit toujours. J'ai également essayé d'utiliser popupwindow. Quelle est la solution facile à ce problème?

+0

si vous utilisez des entiers littéraux des valeurs de toute façon, avez-vous essayé de placer la 'android: layout_width = « 264dp »' au parent xml – user2450263

+0

vérifier mon ans mon ami –

Répondre

0

Essayez d'utiliser DialogFragment

public class DialogChangePasswordFragment extends DialogFragment { 
private Listener dialogButtonClick; 
private EditText editOldPassword; 
private EditText editNewPassword; 
private EditText editConfirmPassword; 

public static DialogChangePasswordFragment newInstance() { 
    DialogChangePasswordFragment fragment = new DialogChangePasswordFragment(); 
    return fragment; 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    try { 
     dialogButtonClick = (Listener) context; 
    } catch (Exception e) { 
     dialogButtonClick = (Listener) getTargetFragment(); 
     e.printStackTrace(); 
    } 

} 

@Override 
public void onResume() { 
    super.onResume(); 
    getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    dialogButtonClick = null; 
} 

@NonNull 
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    Dialog dialog = super.onCreateDialog(savedInstanceState); 
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
    return dialog; 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.dialog_password_confirm, container, false); 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    TextView dialogOk = (TextView) view.findViewById(R.id.dialogOk); 
    TextView dialogCancel = (TextView) view.findViewById(R.id.dialogCancel); 
    dialogOk.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (validateFields()) { 
       dialogButtonClick.onConfirmChangePassword(editOldPassword.getText().toString().trim(), editConfirmPassword.getText().toString().trim()); 
       dismiss(); 
      } 
     } 
    }); 
    setCancelable(false); 
    dialogCancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      dismiss(); 
     } 
    }); 
} 



public interface Listener { 
    void onConfirmChangePassword(String oldPassword, String newPassword); 
} 

}

0

Essayez réglage de la largeur des boutons à 0DP. Aussi, essayez d'utiliser les outils -> android -> inspecteur de mise en page sur votre activité. Il pourrait vous donner un meilleur aperçu de ce qui se passe

+0

son toujours le même –

+0

essayer écran capture Aperçu dans l'inspecteur de disposition –

0

Je pense que vous devez définir la largeur majeure et mineure dans votre xml:

windowFixedWidthMajor: une largeur fixe pour la fenêtre le long de l'axe principal de l'écran , c'est quand dans le paysage.

windowFixedWidthMinor: Une largeur fixe pour la fenêtre le long de l'axe secondaire de l'écran, c'est-à-dire en mode portrait.

Par exemple, dans votre style.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     // your relevant item 
     <item name="alertDialogTheme">@style/DialogTheme</item> 
    </style> 

    <style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog"> 
     <item name="windowFixedWidthMajor">90%</item> 
     <item name="windowFixedWidthMinor">90%</item> // this should fix your issue 
    </style> 

// your other styles 
</resources> 

Hope this helps. Désolé pour mon anglais.

+0

Je l'ai essayé en utilisant ContextThemeWrapper et cela n'a pas fonctionné. Est-ce que j'applique mal le style? Comment dois-je le faire –

+0

Vous n'avez besoin d'aucune ligne de code, modifiez simplement votre style.xml comme ci-dessus en ajoutant l'item 'alertDialogTheme' et en ajoutant le style" DialogTheme ". N'oubliez pas d'enlever votre "espace de piratage". – Cochi

1

essayer ce mon ami

AlertDialog.Builder build = new AlertDialog.Builder(Login.this); 
    LayoutInflater mlLayoutInflater=LayoutInflater.from(MainActivity.this); 
    final View dialView=mlLayoutInflater.inflate(R.layout.R.layout.dialog_leave,null); 
    AlertDialog dialog_card = build.create(); 
    Window window = dialog_card.getWindow(); 
    window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); 
    window.setGravity(Gravity.CENTER); 
    build.show(); 
+0

travailler pour mon cas, merci – ltvie

0

Vous faites tout droit, juste vous changer xml mise en page:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#33000000" 
    android:gravity="center"> 

<RelativeLayout 
    android:id="@+id/main" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@android:color/white" 
    android:paddingTop="23dp"> 

    <ImageView 
     android:id="@+id/officer" 
     android:layout_width="47dp" 
     android:layout_height="47dp" 
     android:layout_marginLeft="24dp" 
    android:background="@drawable/officerman"/> 
    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="84dp" 
     android:layout_marginTop="4dp" 
     android:lineSpacingExtra="2dp" 
     android:text="Are you sure you want\nto sign out?" 
     android:textColor="#1C86FF" 
     android:textSize="15.5dp" /> 

    <LinearLayout 
     android:layout_width="264dp" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/officer" 
     android:layout_marginTop="20dp" 
     android:orientation="horizontal" 
     android:weightSum="1"> 

     <Button 
      android:id="@+id/yes" 
      android:layout_width="wrap_content" 
      android:layout_height="42dp" 
      android:layout_weight="0.5" 
      android:background="#1C86FF" 
      android:text="Yes" 
      android:textAllCaps="false" 
      android:textColor="@android:color/white" 
      android:textSize="15dp" /> 

     <Button 
      android:id="@+id/no" 
      android:layout_width="wrap_content" 
      android:layout_height="42dp" 
      android:layout_weight="0.5" 
      android:background="#0078FF" 
      android:text="No" 
      android:textAllCaps="false" 
      android:textColor="@android:color/white" 
      android:textSize="15dp" /> 

    </LinearLayout> 

</RelativeLayout> 
</LinearLayout> 

Et Java code:

final Dialog dialog = new Dialog(Login.this, android.R.style.Theme_Translucent_NoTitleBar); 
    //dialog.setCancelable(false); 
    View view = LayoutInflater.from(Login.this).inflate(R.layout.dialog_leave, null); 
    dialog.setContentView(view); 
    dialog.show(); 

Il sera des œuvres .

+0

Merci, cela fonctionne, mais l'animation de l'apparence est moins lisse. Il sort juste au lieu d'un léger flou. Avez-vous une idée de comment le faire apparaître avec une animation similaire à une boîte de dialogue d'alerte? –

+0

vous pouvez créer une animation personnalisée pour le dialogue. Ref: https: //stackoverflow.com/questions/4817014/animate-a-custom-dialog –

+0

Créez vos xml d'animation et définissez-les dans dialog comme suit: dialog.getWindow(). GetAttributes(). WindowAnimations = R.style.PauseDialogAnimation; –

0
Try this it will work fine as you asked.. 

// Change your xml file by fallowing code 

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:id="@+id/main" 
android:paddingTop="23dp" 
android:background="@android:color/white"> 

<ImageView 
    android:id="@+id/officer" 
    android:layout_width="47dp" 
    android:layout_height="47dp" 
    android:layout_marginLeft="24dp" 
    android:background="@drawable/officerman"/> 

<TextView 
    android:id="@+id/text" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Are you sure you want\nto sign out?" 
    android:textSize="15.5dp" 
    android:textColor="#1C86FF" 
    android:layout_marginTop="4dp" 
    android:lineSpacingExtra="2dp" 
    android:layout_marginLeft="84dp"/> 

<LinearLayout 
    android:layout_marginTop="20dp" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:layout_below="@id/officer"> 

    <Button 
    android:id="@+id/yes" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:layout_height="42dp" 
    android:background="#1C86FF" 
    android:text="Yes" 
    android:textAllCaps="false" 
    android:textSize="15dp" 
    android:textColor="@android:color/white"/> 

    <Button 
    android:id="@+id/no" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:layout_height="42dp" 
    android:background="#0078FF" 
    android:textSize="15dp" 
    android:textColor="@android:color/white" 
    android:textAllCaps="false" 
    android:text="No"/> 
    </LinearLayout> 

</RelativeLayout>