Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I want to set max height in dialog fragment

<?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:orientation="vertical" 
    android:minWidth="@dimen/dialog_min_width"
    android:padding="@dimen/dialog_padding"
    android:background="@drawable/dialog_background" >

    <TextView android:id="@+id/base_dialog_title"
        style="@style/DialogTitleTextViewStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:gravity="center" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="16dp" >
    </FrameLayout>

<!-- *********************** HERE ************************* -->

    <FrameLayout android:id="@+id/base_dialog_content"
        android:background="@drawable/dialog_description_background"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </FrameLayout>

<!-- *********************** HERE ************************* -->

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="16dp" >
    </FrameLayout>

    <LinearLayout android:id="@+id/base_dialog_button_group"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:orientation="horizontal">

    <Button
        android:id="@+id/base_dialog_button_negative"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:visibility="gone"/>

    <Button
        android:id="@+id/base_dialog_button_neutral"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:visibility="gone"/>

    <Button
        android:id="@+id/base_dialog_button_positive"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:visibility="gone"/>

    </LinearLayout>
</LinearLayout>

This is dialog fragment layout.

I add content view (TextView or ListView) into FrameLayout (@id/base_dialog_content)

When ListView has many Items, Dialog is full height in window.

I want to set maximum height dialog or content view (or list view)


Edit:

I solve the problem using OnLayoutChangeListener.

But I need same function in lower version (below HoneyComb)

In DialogFragment.onCreateView()

FrameLayout contentContainer = (FrameLayout) view.findViewById(R.id.base_dialog_content);       
final View contentView = createContentView(inflater, contentContainer);
contentContainer.addView(contentView);

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // TODO Check content view height and change height
} else {
    view.addOnLayoutChangeListener(new OnLayoutChangeListener() {

        @Override
        public void onLayoutChange(View v, int left, int top, int right,
                int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
            int height = v.getHeight();
            int contentHeight = contentView.getHeight();
            int winHeight = ActivityUtil.getDisplayHeight(getSherlockActivity());

            LogUtils.pe(height+" / "+winHeight+" / "+contentHeight);

            int needHeight = height - winHeight*8/10;
            if (needHeight > 0) {
                contentView.setLayoutParams(
                        new LayoutParams(LayoutParams.MATCH_PARENT, contentHeight-needHeight));
            }
        }
    });
}
like image 400
ChangUZ Avatar asked May 28 '13 04:05

ChangUZ


People also ask

What is the difference between dialog and dialog fragment?

Dialog: A dialog is a small window that prompts the user to make a decision or enter additional information. DialogFragment: A DialogFragment is a special fragment subclass that is designed for creating and hosting dialogs.


1 Answers

to control the maximum height you have to put the content view in one layout container first (Linear/Relative) let's say in my example I'll use linearlayout

to measure the screen height (I put it in Util.java ):

public static int getDisplayHeight(Context context) {
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay(); 
        int height = display.getHeight(); 

        return height;
    }

after that you create a container :

LinearLayout llContainerContent = new LinearLayout(context);
LayoutParams lpContainerContent = new LayoutParams(LayoutParams.FILL_PARENT, (Util.getDisplayHeight(context) * 8) /10);
llContainerContent.setLayoutParams(lpContainerContent);

after that you add the textview/listview to the container then you add the container to the framelayout. I hope my answer is clear enough for you but if you have another question please feel free to ask in the comment :)

like image 52
Niko Adrianus Yuwono Avatar answered Sep 20 '22 16:09

Niko Adrianus Yuwono