【问题标题】:Dialog activity to wrap content用于包装内容的对话框活动
【发布时间】:2015-12-23 13:19:52
【问题描述】:

与对话活动以及如何使这些全屏相关的问题类似,但我有一个稍微不同的问题。我希望这些对话框包装活动内容。

现在,“对话活动”都继承了以下主题,

<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 单位可以解决问题,但这似乎是一种解决方法,而不是解决方案。

有什么想法吗?

提前致谢。

干杯

【问题讨论】:

  • 问题解决了吗?如果是这样,请告诉我。
  • 嗨,你找到解决办法了吗?谢谢
  • 您是使用Dialogue 作为Activity 还是使用Activity 作为Dialogue?为什么?

标签: android android-layout


【解决方案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】:

    使用 Theme.AppCompat.Light.Dialog.Alert 主题代替.. 它应该包装对话框高度以包装内容。

    【讨论】:

      【解决方案4】:

      尝试设置 layout_margin。如果失败,那么常规活动填充和边距可能是罪魁祸首。

      【讨论】:

        【解决方案5】:

        我使用的是DialogFragment,如果你使用setStyle,效果会很好

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

        【讨论】:

          【解决方案6】:

          同样使用自定义对话框。

          只需将 xml 布局设置为将父级layout_width 填充到fill_parent 的屏幕。

          【讨论】:

            【解决方案7】:

            你可以简单地获取android设备屏幕的宽度和高度通过:

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

            然后你可以根据这些值指定宽度或高度!如:

             getWindow().setLayout(widths ,
                                   heights );
            

            希望这会有所帮助:) ,,,

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-06-12
              • 1970-01-01
              • 1970-01-01
              • 2012-10-23
              相关资源
              最近更新 更多