Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adjusting DialogFragment Width and Height

I have problem with DialogFragmnt's Width and Height. Here is my class representing DialogFragmetn:

public class RecipeAddDialogFragment extends DialogFragment {

    private ArrayList<RecipeDialogItem> recipeDialogItems;
    private RecipeAddDialogAdapter recipeDialogAdapter;
    private String recipeUniqueId;
    private CoordinatorLayout coordinatorLayout;
    private RecipeAddDialogFragment recipeDialogFragment;

    @Override
    public void onStart() {
        super.onStart();
        if (getDialog() == null) {
            return;
        }

        int dialogWidth = 600;
        int dialogHeight = 300;
        getDialog().getWindow().setLayout(dialogWidth, dialogHeight);
        getDialog().setTitle(getString(R.string.recipe_dialog_title));
    }

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_DialogFragment);
    }

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

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        recipeDialogItems = new ArrayList<>();
        RecyclerView dialogRecyclerView = (RecyclerView) view.findViewById(
                R.id.dialog_recycler_view);

        recipeDialogAdapter = new RecipeAddDialogAdapter(getContext(), recipeDialogItems,
                R.layout.recipe_dialog_item);
        recipeDialogAdapter.setRuidClRdf(recipeUniqueId, coordinatorLayout, recipeDialogFragment);

        dialogRecyclerView.setHasFixedSize(true);
        dialogRecyclerView.setAdapter(recipeDialogAdapter);
        dialogRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        fillRecipeDialogArray();
    }

    private void fillRecipeDialogArray() {
        String name = getString(R.string.add_to_favourites);
        int icon = R.drawable.ic_heart_48dp;;

        RecipeDialogItem dialogItem = new RecipeDialogItem();
        dialogItem.setRowIcon(icon);
        dialogItem.setRowOption(name);
        recipeDialogItems.add(dialogItem);

        recipeDialogAdapter.notifyDataSetChanged();
    }

    public void setReferences(String recipeUniqueId, CoordinatorLayout coordinatorLayout,
                              RecipeAddDialogFragment recipeDialogFragment) {
        this.recipeUniqueId = recipeUniqueId;
        this.coordinatorLayout = coordinatorLayout;
        this.recipeDialogFragment = recipeDialogFragment;
    }
}

Here is .xml which I infalte in this DialogFragment:

<?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:gravity="center|left"
    android:padding="16dp"
    android:orientation="horizontal"
    android:clickable="true"
    android:background="?android:attr/selectableItemBackground">

    <!-- Option Icon -->
    <ImageView
        android:id="@+id/recipe_dialog_option_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="4dp"
        android:tint="@color/primary" />

    <!-- Text Option -->
    <TextView
        android:id="@+id/recipe_dialog_option_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textColor="@color/primary_text" />

</LinearLayout>

The problem is that when I set it's size to 600 x 300 it is displayed fine in my 1280x720 device, but for example when my friend displays it on 1920x1080 resolution dialog is wrapped and only title is shown. List is wrapped and is not entire shown. Any idea how can I automaticly set it's size to fit every display and show entire dialog which is wrapped to it's content?

Edit

I have figured out to adjust the width of the DialogFragment to it's content like this:

getDialog().getWindow().setLayout(WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT);
    getDialog().setTitle(getString(R.string.recipe_dialog_title));

However height is not working properly :/

like image 752
anton86993 Avatar asked Dec 07 '15 21:12

anton86993


People also ask

How do I set the width and height of an AlertDialog?

show(); alertDialog. getWindow(). setLayout(600, 400); //Controlling width and height. Or you can do it in my way.

Is DialogFragment deprecated?

This class was deprecated in API level 28. Use the Support Library DialogFragment for consistent behavior across all devices and access to Lifecycle.


1 Answers

In DialogFragment.onResume():

int width = getResources().getDimensionPixelSize(R.dimen.popup_width);
int height = getResources().getDimensionPixelSize(R.dimen.popup_height);        
getDialog().getWindow().setLayout(width, height);

In the layout for the dialog:

android:layout_width="match_parent"
android:layout_height="match_parent"

Can take whole screen with:

getDialog().getWindow().setLayout(
    getResources().getDisplayMetrics().widthPixels,
    getResources().getDisplayMetrics().heightPixels
);

Hope that helps

Found the idea here How to set DialogFragment's width and height?

like image 155
Luis Avatar answered Oct 24 '22 05:10

Luis