Я хочу установить максимальную высоту в фрагменте диалога

<?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 имеет много элементов, Диалог имеет полную высоту в окне.

Я хочу установить диалог максимальной высоты или просмотр содержимого (или просмотр списка)


Редактировать:

Я решаю проблему, используя OnLayoutChangeListener.

Но мне нужна такая же функция в нижней версии (ниже HoneyComb)

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

Чтобы контролировать максимальную высоту, вы должны сначала разместить представление содержимого в одном контейнере компоновки (Linear / Relative), скажем, в моем примере, я буду использовать 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; } 

После этого вы создаете контейнер:

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

После этого вы добавляете textview / listview в контейнер, затем добавляете контейнер в рамку. Надеюсь, мой ответ достаточно ясен для вас, но если у вас есть другой вопрос, не стесняйтесь спрашивать в комментарии 🙂

Используйте этот код для увеличения высоты и ширины экрана для диалога

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