Диалоговое действие, чтобы обернуть содержимое - PullRequest
18 голосов
/ 31 мая 2011

Были похожие вопросы, связанные с диалоговыми действиями и как сделать их полноэкранными, но у меня немного другая проблема. Я хочу, чтобы эти диалоги обернули содержимое активности.

Теперь все «диалоговые действия» наследуют следующую тему:

<style name="tabDialog" parent="@android:Theme.Dialog">
    <item name="android:windowBackground">@drawable/panel_background</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">false</item>
</style>

Пример определения активности в манифесте,

<activity android:name=".TabSettingsActivity"
    android:theme="@style/tabDialog" android:excludeFromRecents="true"
    android:configChanges="keyboardHidden" />

Родительский вид представления содержимого определяется следующим образом:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:background="@layout/dialog_rounded_background"
    android:orientation="vertical">

и все дочерние представления в макете также указывают wrap_content для обоих измерений. Я пытался использовать RelativeLayout в качестве родителя, но то же самое.

После того, как в onCreate операции было установлено представление содержимого, я делаю это

  getWindow().setLayout(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT);

Ни одна из этих вещей, кажется, вообще ничего не меняет. Проблема в основном связана с высотой диалогового окна, которая примерно на 50% больше необходимой. Половина диалога - просто мертвое пространство. Установка размеров корневого представления для жестко заданных единиц измерения dp решает проблему, но это скорее обходной путь, чем решение.

Есть идеи у кого-нибудь?

Заранее спасибо.

Приветствия

Ответы [ 7 ]

3 голосов
/ 28 октября 2013

Попробуйте это.Это решило мою проблему.

<style name="NewDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowTitleStyle">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:background">@android:color/transparent</item>
    </style>
2 голосов
/ 23 декабря 2015

вместо этого используйте тему Theme.AppCompat.Light.Dialog.Alert ... она будет переносить высоту диалогового окна для переноса содержимого.

2 голосов
/ 27 ноября 2013

Фон диалогового окна в родительском представлении "dialog_ounded_background", который вы используете, является проблемой, потому что он может быть больше, чем ваш размер экрана. Пожалуйста, проверьте это.

1 голос
/ 19 декабря 2013

Просто вы можете получить ширину и высоту экрана устройства Android. По:

    //Define the size of layout 
    Display display = getWindowManager().getDefaultDisplay(); 
    int widths = display.getWidth();  
    int heights = display.getHeight(); 

Тогда вы можете указать ширину или высоту на основе этих значений! Как:

 getWindow().setLayout(widths ,
                       heights );

Надеюсь, это будет полезно :) ,,,

1 голос
/ 03 декабря 2013

Используйте настраиваемое диалоговое окно для того же самого.

Просто установите макет xml, чтобы заполнить экран с родительским layout_width значением fill_parent.

1 голос
/ 18 июля 2012

Я использую DialogFragment, и он хорошо работает, если вы используете setStyle

public class MyDialogFragment extends DialogFragment {
        public MyDialogFragment() {
            setStyle(STYLE_NO_FRAME, android.R.style.Theme_Dialog);
        }
    }
1 голос
/ 09 сентября 2011

Попробуйте установить layout_margin. Если это не помогло, возможно, виноваты регулярные поля активности и поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...