Подтвердить что ты не робот

Диалоговая активность для переноса содержимого

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

Теперь "действия диалога" наследуют следующую тему,

<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 ​​решает проблему, но это похоже на обходное решение, а не на решение.

Любые идеи кто-нибудь?

Спасибо заранее.

Приветствия

4b9b3361

Ответ 1

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

<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

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

Ответ 3

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

Ответ 4

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

public class MyDialogFragment extends DialogFragment {
        public MyDialogFragment() {
            setStyle(STYLE_NO_FRAME, android.R.style.Theme_Dialog);
        }
    }

Ответ 5

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

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

Ответ 6

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

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

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

 getWindow().setLayout(widths ,
                       heights );

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

Ответ 7

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