我想在对话框片段中设置最大高度

<?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> 

这是对话框片段布局。

我将内容视图(TextView或ListView)添加到FrameLayout(@ id / base_dialog_content)

当ListView有很多Items时,Dialog在窗口中是全高的。

我想设置最大高度对话框或内容视图(或列表视图)


编辑:

我使用OnLayoutChangeListener解决了这个问题。

但是我需要在较低版本(下面的HoneyComb)相同的function,

在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)); } } }); } 

Solutions Collecting From Web of "我想在对话框片段中设置最大高度"

要控制最大高度,你必须把内容视图放在一个布局容器(线性/相对)让我们说在我的例子中,我将使用linearlayout

测量屏幕高度(我把它放在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; } 

之后你创build一个容器:

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

之后,您将textview / listview添加到容器,然后您将容器添加到framelayout。 我希望我的回答对你来说已经足够清楚了,但是如果你有另一个问题,请在评论中随意提问:)

使用此代码的全屏幕高度和宽度的对话框

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