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

33
如果我已经定义了一个Activity:
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现在甚至占据了整个屏幕:( 。宽度和高度的定义:

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

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


尝试将宽度和高度设置为“wrap_content”。同时添加一些边距。 - chedine
命名空间不正确。请尝试使用以下代码:<style name="myDialog" parent="@android:style/Theme.Dialog"> - chedine
@chedine,那是我的打字错误。我按照您的建议做了,但没有解决问题。 - Leem
尝试在super.onCreate()之前在您的活动中设置主题。YourActivity.setTheme(R.style.myDialog),并从清单中删除主题选项。 - chedine
5个回答

44

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

DialogActivityonCreate()方法中,添加以下代码:

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

this.getWindow().setAttributes(params); 

4
我修改后的活动边框是黑色的。有办法让它们半透明吗? - Michal Vician
1
这段代码将无法正常工作,因为此时宽度可能为0。你应该使用addOnGlobalLayoutListener并将上述逻辑放入其中。 - LiangWang
4
这句话的意思是:在调用setContentView(int res)方法之后,才能使用this.getWindow().setAttributes(params)方法。 - Vishal Pandey
有人能告诉我params.x和params.y属性实际上是做什么的吗? - Sajib Acharya
1
是的,这对我有效,但在调整大小的活动周围,空间/边框是黑色的,我该如何去掉边框? - user2899094
2
有没有一种在XML中干净地完成而不需要在代码中实现的方法? - Zhen Liu

4
您可以在您的 activity 中更改 window 的参数,如下所示:
override fun onStart() {
        super.onStart()
        window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
    }

2

我有类似的问题,我为我的活动使用了以下主题。

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

以下代码解决了我的问题。
 setContentView(R.layout.activity_layout);
 getWindow().setLayout(width(pixels),height(pixels));

0
你可以在布局的 XML 文件中设置布局的高度和宽度。
甚至可以指定像“240px”这样的值,用于 android:layout_width/android:layout_height。

0

有一行代码可以不必麻烦地处理LayoutParams,它是

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

这是我之前在一个项目中使用过的,现在正在寻找,但是发现它就在同一个项目中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接