I want to set the maximum height in the 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 a mock fragment of the dialog.

I am adding a content view (TextView or ListView) to FrameLayout (@ id / base_dialog_content)

When a ListView has many elements, the Dialog has full height in the window.

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


Edit:

I solve the problem using OnLayoutChangeListener.

But I need the same function in the 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)); } } }); } 
+8
android android-layout android-linearlayout
source share
2 answers

to control the maximum height, you must first place the content view in one layout container (Linear / Relative), say, in my example, I will use linearlayout

to measure the height of the screen (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 textview / listview to the container, then add the container to the frame. Hope my answer is clear enough for you, but if you have another question, feel free to ask in the comments :)

+1
source share

Use this code for the height and width of the full screen for dialogue

  WindowManager window = (WindowManager)context .getSystemService(Context.WINDOW_SERVICE); Display display = window.getDefaultDisplay(); displayheight = display.getHeight(); displaywidth = display.getWidth(); dialog.getWindow().setLayout(displaywidth , displayheight ); 
+1
source share

All Articles