将活动显示为对话框时如何自定义宽度和高度

Posted

技术标签:

【中文标题】将活动显示为对话框时如何自定义宽度和高度【英文标题】:How to customize the width and height when show an Activity as a Dialog 【发布时间】:2011-10-01 06:07:36 【问题描述】:

如果我定义了一个活动:

public class DialogActivity extends Activity

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(dialog_activity.xml);
    



我想像对话框一样显示上面的活动,所以在 androidManifest.xml 文件中,我声明这个活动如下:

<activity android:name=".DialogActivity" android:theme="@android:style/Theme.Dialog"/>

此时一切正常,我的DialogActivity 显示为对话框。

问题是如何自定义DialogActivity的宽高,让它更像一个小对话框? (目前默认占据大部分屏幕)

----------------更新--------------- --------

我定义了一个自定义主题,如下所示:

<style name="myDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>

        <item name="android:width">100dip</item> 
        <item name="android:height">100dip</item>

</style>

然后,将 AndroidManifest.xml 中的DialogActivity 声明为。

<activity android:name=".DialogActivity" android:theme="@style/myDialog"/>

我的DialogActivity现在甚至占据了整个屏幕:(。widthheight定义:

<item name="android:width">100dip</item>

在主题中没有任何效果,为什么?

【问题讨论】:

尝试宽度和高度为“wrap_content”。也添加一些边距。 命名空间不正确。试试这个, @chedine ,这是我的错字。我按照你的建议做了,但没有解决问题 尝试在您的活动中设置主题。在你的 super.onCreate();YourActivity.setTheme(R.style.myDialog) 之前并从清单中删除主题选项。 【参考方案1】:

我终于找到了一种自定义DialogActivity 大小的方法。

DialogActivityonCreate()方法里面,添加如下代码:

WindowManager.LayoutParams params = getWindow().getAttributes();  
params.x = -20;  
params.height = 100;  
params.width = 550;  
params.y = -10;  

this.getWindow().setAttributes(params); 

【讨论】:

我修改的活动的边框是黑色的。有没有办法让它们半透明? 这不起作用,因为那时宽度可能为0。您应该使用 addOnGlobalLayoutListener 并将上述逻辑放入其中。 **this.getWindow().setAttributes(params); ** 必须在 setContentView(int res) 之后。 是的,这对我有用,但是在调整大小的活动周围,空间/边框是黑色的,我该如何删除边框? 有没有办法在 XML 中干净地做到这一点,而不是在代码中?【参考方案2】:

您可以在布局xml文件中设置布局高度和宽度

您甚至可以为 android:layout_width/android:layout_height 提及诸如“240px”之类的值

【讨论】:

【参考方案3】:

我遇到了类似的问题,我在活动中使用了以下主题

android:theme="@style/Base.Theme.AppCompat.Light.Dialog"

以下代码解决了我的问题

 setContentView(R.layout.activity_layout);
 getWindow().setLayout(width(pixels),height(pixels));

【讨论】:

【参考方案4】:

有一个无需麻烦的 LayoutParams 的一行代码

getWindow().setLayout((int)(width*.8),(int)(height*.25));

这是我之前在我的一个项目中使用过的,现在正在搜索,但在同一个项目中找到了它。

【讨论】:

【参考方案5】:

您可以在活动中更改窗口的参数,例如:

override fun onStart() 
        super.onStart()
        window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
    

【讨论】:

以上是关于将活动显示为对话框时如何自定义宽度和高度的主要内容,如果未能解决你的问题,请参考以下文章

如何在XML中为视图指定宽度和高度的百分比?

带有动画更改的自定义进度对话框的大小

在片段活动中显示自定义对话框

如何在 Material-UI 中为对话框设置高度?

android将activity设置成自定义的Dialog怎么调整大小

如何在通知到达时在任何屏幕上显示自定义对话框?