dans mon application, ma boîte de dialogue personnalisée créée n'a pas toute la hauteur et je ne peux pas modifier ni personnaliser that.for example voir cette capture d'écran:
Mon code:
final Dialog contacts_dialog = new Dialog(ActivityGroup.this, R.style.theme_sms_receive_dialog);
contacts_dialog.setContentView(R.layout.dialog_schedule_date_time);
contacts_dialog.setCancelable(true);
contacts_dialog.setCanceledOnTouchOutside(true);
contacts_dialog.show();
disposition:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/layoutRoot"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@null"
Android:orientation="vertical" >
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/shape_header_dialog_background"
Android:orientation="horizontal"
Android:padding="4dp" >
<TextView
Android:id="@+id/TextView21"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_marginRight="5dp"
Android:layout_weight="2"
Android:gravity="center_vertical|right"
Android:text="@string/choose_schedule_time_date"
Android:textColor="#ffffff"
Android:textSize="14sp"
Android:textStyle="bold" />
<ImageView
Android:id="@+id/ImageView03"
Android:layout_width="50dp"
Android:layout_height="50dp"
Android:layout_marginTop="0dp"
Android:background="@drawable/icon_scudule_time" />
</LinearLayout>
</LinearLayout>
Style:
<style name="theme_sms_receive_dialog" parent="Android:style/Theme.Dialog">
<item name="Android:windowNoTitle">true</item>
<item name="Android:background">@Android:color/transparent</item>
<item name="Android:windowBackground">@Android:color/transparent</item>
<item name="numberPickerStyle">@style/NPWidget.Holo.Light.NumberPicker</item>
</style>
Cela peut être fait de deux manières, la première dans style.xml et la deuxième dans le code:
<style name="Theme_Dialog" parent="Android:Theme.Holo.Dialog"> <item name="Android:windowMinWidthMajor">90%</item> <item name="Android:windowMinWidthMinor">90%</item> </style>
final Dialog contacts_dialog = new Dialog(ActivityGroup.this, R.style.theme_sms_receive_dialog); contacts_dialog.setContentView(R.layout.dialog_schedule_date_time);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
contacts_dialog.setCancelable(true);
contacts_dialog.setCanceledOnTouchOutside(true);
contacts_dialog.show();
Vous devez obtenir la fenêtre actuelle et définir la valeur LayoutParams
comme suit:
Dialog d=new Dialog(mContext,R.style.mydialog);
.........
.........
myDialog.show();
Window window = myDialog.getWindow();
window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
Alternative (si la solution ci-dessus ne fonctionne pas)
Si le code ci-dessus ne fonctionne pas bien, vous pouvez utiliser une solution de contournement.
styles.xml
<style name="mydialog"></style>
Java
Dialog d=new Dialog(mContext,R.style.mydialog);
.........
.........
myDialog.show();
Window window = myDialog.getWindow();
window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
Pour une boîte de dialogue pleine largeur, vous pouvez créer un style personnalisé pour la boîte de dialogue. Le code est donné ci-dessous pour la boîte de dialogue pleine largeur:
<style name="Custom_Dialog" parent="ThemeOverlay.AppCompat.Light" >
<item name="windowMinWidthMajor">100%</item>
<item name="windowMinWidthMinor">65%</item>
</style>
Pour affecter ce style au constructeur de la boîte de dialogue, ajoutez ceci à la méthode onCreate()
juste après la fonction setContentView()
:
getWindow()
.setLayout(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
Dans mon cas, la largeur de la boîte de dialogue personnalisée diminue en taille (largeur) au fur et à mesure que le contenu de la boîte de dialogue devient plus petit, même si la propriété width a été définie
Android:layout_width="match_parent"
Je viens de fixer cette largeur à la taille de l'écran et maintenant son fonctionnement en fonction de mes besoins
Android:layout_width="320dp"
Si quelqu'un se demande comment procéder pour une boîte de dialogue affichée à l'aide de DialogFragment
, vous pouvez remplacer onCreateDialog
pour renvoyer une boîte de dialogue avec un style personnalisé avec windowMinWidthMajor
et mineur défini à 90%
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new Dialog(getActivity(), R.style.WideDialog);
}
Style:
<style name="WideDialog" parent="Base.Theme.AppCompat.Dialog">
<item name="Android:windowMinWidthMajor">90%</item>
<item name="Android:windowMinWidthMinor">90%</item>
</style>
Ajouter du code lorsque vous souhaitez ouvrir une boîte de dialogue
final Dialog mBottomSheetDialog = new Dialog(getActivity(), R.style.MaterialDialogSheet);
mBottomSheetDialog.setContentView(R.layout.dialog_mainscreen_filter); // your custom view.
mBottomSheetDialog.setCancelable(true);
mBottomSheetDialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
mBottomSheetDialog.getWindow().setGravity(Gravity.BOTTOM);
mBottomSheetDialog.show();
ImageView img_cross = mBottomSheetDialog.findViewById(R.id.img_cross);
final ImageView img_new = mBottomSheetDialog.findViewById(R.id.img_new);
final ImageView img_Used = mBottomSheetDialog.findViewById(R.id.img_Used);
img_cross.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mBottomSheetDialog.dismiss();
}
});
img_new.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
img_new.setImageResource(R.drawable.checkbox_tick);
img_Used.setImageResource(R.drawable.checkbox_tick_gray);
}
});
img_Used.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
img_Used.setImageResource(R.drawable.checkbox_tick);
img_new.setImageResource(R.drawable.checkbox_tick_gray);
}
});
xml de la boîte de dialogue
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
>
<Android.support.v7.widget.CardView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:cardBackgroundColor="@color/colorWhite"
app:cardCornerRadius="5dp"
app:cardElevation="@dimen/margin_10">
<LinearLayout xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:padding="@dimen/margin_10">
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerVertical="true"
Android:text="@string/filter"
Android:textStyle="bold"
Android:textColor="@color/colorGreen"
Android:textSize="@dimen/font_large" />
<ImageView
Android:id="@+id/img_cross"
Android:layout_width="25dp"
Android:layout_height="25dp"
Android:layout_alignParentRight="true"
Android:layout_centerVertical="true"
Android:src="@drawable/cross" />
</RelativeLayout>
<View
Android:layout_width="match_parent"
Android:layout_height="1dp"
Android:layout_marginTop="@dimen/margin_20"
Android:background="@color/colorfaintGreen" />
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="@dimen/margin_20"
Android:gravity="center_vertical"
Android:orientation="horizontal">
<ImageView
Android:id="@+id/img_new"
Android:layout_width="25dp"
Android:layout_height="25dp"
Android:src="@drawable/checkbox_tick" />
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="@dimen/margin_10"
Android:text="@string/New"
Android:textColor="@color/colorText"
Android:textSize="@dimen/fontsize_normal"
Android:textStyle="bold" />
<ImageView
Android:id="@+id/img_Used"
Android:layout_width="25dp"
Android:layout_height="25dp"
Android:layout_marginLeft="@dimen/margin_30"
Android:src="@drawable/checkbox_tick_gray" />
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="@dimen/margin_10"
Android:text="@string/Used"
Android:textColor="@color/colorText"
Android:textSize="@dimen/fontsize_normal"
Android:textStyle="bold" />
</LinearLayout>
<View
Android:layout_width="match_parent"
Android:layout_height="1dp"
Android:layout_marginTop="@dimen/margin_20"
Android:background="@color/colorfaintGreen" />
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="@dimen/margin_20"
Android:orientation="horizontal">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:gravity="center"
Android:orientation="vertical">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="00"
Android:textColor="@color/colorTextGray"
Android:textSize="@dimen/fontsize_medium"
Android:textStyle="bold" />
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="|"
Android:textColor="@color/colorTextGray"
Android:textSize="@dimen/fontsize_normal"
Android:textStyle="bold" />
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:gravity="center"
Android:orientation="vertical">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="50"
Android:textColor="@color/colorTextGray"
Android:textSize="@dimen/fontsize_medium"
Android:textStyle="bold" />
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="|"
Android:textColor="@color/colorTextGray"
Android:textSize="@dimen/fontsize_normal"
Android:textStyle="bold" />
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:gravity="center"
Android:orientation="vertical">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="100"
Android:textColor="@color/colorTextGray"
Android:textSize="@dimen/fontsize_medium"
Android:textStyle="bold" />
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="|"
Android:textColor="@color/colorTextGray"
Android:textSize="@dimen/fontsize_normal"
Android:textStyle="bold" />
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:gravity="center"
Android:orientation="vertical">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="200"
Android:textColor="@color/colorTextGray"
Android:textSize="@dimen/fontsize_medium"
Android:textStyle="bold" />
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="|"
Android:textColor="@color/colorTextGray"
Android:textSize="@dimen/fontsize_normal"
Android:textStyle="bold" />
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:gravity="center"
Android:orientation="vertical">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="200+"
Android:textColor="@color/colorTextGray"
Android:textSize="@dimen/fontsize_medium"
Android:textStyle="bold" />
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="|"
Android:textColor="@color/colorTextGray"
Android:textSize="@dimen/fontsize_normal"
Android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
<RelativeLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerVertical="true"
Android:layout_marginLeft="22dp"
Android:layout_marginTop="@dimen/margin_20"
Android:src="@drawable/filled_green" />
<SeekBar
Android:id="@+id/seekbar"
style="@style/SeekBarWithoutSteps"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginLeft="22dp"
Android:layout_marginRight="22dp"
Android:layout_marginTop="@dimen/margin_10"
Android:max="4"
Android:maxHeight="@dimen/margin_5"
Android:minHeight="@dimen/margin_5"
Android:paddingLeft="@dimen/margin_10"
Android:paddingRight="@dimen/margin_10"
Android:progressBackgroundTint="@color/colorGray"
Android:progressTint="@color/colorGreen"
Android:theme="@style/Widget.AppCompat.SeekBar.Discrete"
Android:thumb="@drawable/filled_green"
Android:thumbOffset="15dp" />
</RelativeLayout>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:text="@string/search_near_me_in_km"
Android:textColor="@color/colorTextGray"
Android:textSize="@dimen/fontsize_normal"
Android:textStyle="bold" />
<Button
Android:id="@+id/btn_register"
Android:layout_width="match_parent"
Android:layout_height="@dimen/btn_height"
Android:layout_marginBottom="@dimen/margin_10"
Android:layout_marginTop="@dimen/margin_10"
Android:background="@drawable/btn_bg_green_rounded"
Android:text="@string/submit"
Android:textColor="@color/colorWhite"
Android:textSize="@dimen/fontsize_medium" />
</LinearLayout>
</Android.support.v7.widget.CardView>
</LinearLayout>
Style.xml ------------------------------------------
<style name="MaterialDialogSheet" parent="@Android:style/Theme.Dialog">
<item name="Android:windowIsTranslucent">true</item>
<item name="Android:windowBackground">@Android:color/white</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowNoTitle">true</item>
<item name="Android:backgroundDimEnabled">true</item>
<item name="Android:windowIsFloating">false</item>
<item name="Android:windowAnimationStyle">@style/MaterialDialogSheetAnimation</item>
</style>
<style name="MaterialDialogSheetAnimation">
<item name="Android:windowEnterAnimation">@anim/popup_show</item>
<item name="Android:windowExitAnimation">@anim/popup_hide</item>
</style>
Ajouter des animations dans le dossier res: Anim/popup_show.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate
Android:duration="300"
Android:fromYDelta="100%p"
Android:interpolator="@Android:anim/accelerate_decelerate_interpolator"
Android:toYDelta="0" />
</set>
anim/popup_hide.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate
Android:duration="300"
Android:fromYDelta="0"
Android:interpolator="@Android:anim/accelerate_decelerate_interpolator"
Android:toYDelta="100%p" />
</set>
Utilisez la disposition relative au lieu de la disposition linéaire pour obtenir toute la largeur de la boîte de dialogue personnalisée.
Vous n'avez pas besoin d'ajouter de style pour cela, essayez juste en dessous d'un
Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.your_layout_here);
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
dialog.show();
Remarque: l’utilisation de style
vide prend beaucoup de temps de mémoire dans le processeur. Utilisez plutôt directement dailog.getWindow().setLayout(width,height)
.
Dialog dialog = new Dialog(BASE_CONTEXT, R.style.Theme_Dialog);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.your_layout);
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
Cette réponse pourrait vous être utile . Largeur du dialogue Android
MyDialogFragment myDialogFragment =
new MyDialogFragment(activity,arraylist.get(position).getImage());
myDialogFragment.show();
Window window = myDialogFragment.getWindow();
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
@Override public void onStart() {
super.onStart();
Dialog dialog = getDialog();
if (dialog != null) {
dialog.getWindow()
.setLayout((int) (getScreenWidth(getActivity()) * .9), (int)(getScreenHeight(getActivity()) * .6) );
}
}
public static int getScreenWidth(Activity activity) {
Point size = new Point();
activity.getWindowManager().getDefaultDisplay().getSize(size);
return size.x;
}
public static int getScreenHeight(Activity activity) {
Point size = new Point();
activity.getWindowManager().getDefaultDisplay().getSize(size);
return size.y;
}
exemple de 90% largeur et 60% hauteur