怎样改变Dialog的大小

怎样改变Dialog的大小,第1张

AlertDialog大小的改变

//1)更改AlertDialog窗口大小的方法:

AlertDialog dialog = new AlertDialog.Builder(this).create()

dialog.show()

WindowManager.LayoutParams params = dialog.getWindow().getAttributes()

params.width = 200

params.height = 200

dialog.getWindow().setAttributes(params)

// 2)去除边框

AlertDialog.setView(view,0,0,0,0)

=======================================================================================

伪装dialog大小的改变

1. 创建一个样式文件到你的工程,保存在在res/values/styles.xml,这里文件名不能随便修改,内容为,注意保存时使用UTF-8编码。

<?xml version="1.0" encoding="utf-8"?>

<resources>

<style name="Theme.Android123" parent="android:style/Theme.Dialog">

<item name="android:windowBackground">@drawable/bg</item>

</style>

</resources>

2. 上面我们定义的主题风格为Theme.Android123,父风格仍然从Theme.Dialog实现,但我们自定义了背景,

位置在drawable/bg中,这里我们创建一个bg.xml文件放到res/drawable文件夹中,bg.xml的内容为

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android">

<padding android:left="15dip" android:top="15dip"

android:right="15dip" android:bottom="15dip" />

<stroke android:width="3dip" color="#000000" />

<corners android:radius="5dp" />

<solid android:color="#ffffff" />

</shape>

里面我们定义了一个shape对象,实现背景drawable形状,

其中padding代表距离边框,

这里我们设置了左、上、右、下四个位置的间距。

stroke可以制造出一些3D立体效果,

corners是四个角,

radisu属性可以设置半径,值越大越圆滑,根据运行效果你可以微调,

最后soild是填充颜色,这里我们用了ffffff表示纯白。

3. 最后在androidmanifest.xml中,在你的activity节点加一个 android:theme属性,值为@style/Theme.Android123 即可。

1、控制大小和位置

/*

*

获取对话框的窗口对象及参数对象以修改对话框的布局设置,

*

可以直接调用getWindow(),表示获得这个Activity的Window

*

对象,这样这可以以同样的方式改变这个Activity的属性.

*/

Window

dialogWindow

=

dialog.getWindow()

WindowManager.LayoutParams

lp

=

dialogWindow.getAttributes()

dialogWindow.setGravity(Gravity.LEFT

|

Gravity.TOP)

/*

*

lp.x与lp.y表示相对于原始位置的偏移.

*

当参数值包含Gravity.LEFT时,对话框出现在左边,所以lp.x就表示相对左边的偏移,负值忽略.

*

当参数值包含Gravity.RIGHT时,对话框出现在右边,所以lp.x就表示相对右边的偏移,负值忽略.

*

当参数值包含Gravity.TOP时,对话框出现在上边,所以lp.y就表示相对上边的偏移,负值忽略.

*

当参数值包含Gravity.BOTTOM时,对话框出现在下边,所以lp.y就表示相对下边的偏移,负值忽略.

*

当参数值包含Gravity.CENTER_HORIZONTAL时

*

,对话框水平居中,所以lp.x就表示在水平居中的位置移动lp.x像素,正值向右移动,负值向左移动.

*

当参数值包含Gravity.CENTER_VERTICAL时

*

,对话框垂直居中,所以lp.y就表示在垂直居中的位置移动lp.y像素,正值向右移动,负值向左移动.

*

gravity的默认值为Gravity.CENTER,即Gravity.CENTER_HORIZONTAL

|

*

Gravity.CENTER_VERTICAL.

*

*

本来setGravity的参数值为Gravity.LEFT

|

Gravity.TOP时对话框应出现在程序的左上角,但在

*

我手机上测试时发现距左边与上边都有一小段距离,而且垂直坐标把程序标题栏也计算在内了,

*

Gravity.LEFT,

Gravity.TOP,

Gravity.BOTTOM与Gravity.RIGHT都是如此,据边界有一小段距离

*/

lp.x

=

100

//

新位置X坐标

lp.y

=

100

//

新位置Y坐标

lp.width

=

300

//

宽度

lp.height

=

300

//

高度

lp.alpha

=

0.7f

//

透明度

//

当Window的Attributes改变时系统会调用此函数,可以直接调用以应用上面对窗口参数的更改,也可以用setAttributes

//

dialog.onWindowAttributesChanged(lp)

dialogWindow.setAttributes(lp)

/*

*

将对话框的大小按屏幕大小的百分比设置

*/

//

WindowManager

m

=

getWindowManager()

//

Display

d

=

m.getDefaultDisplay()

//

获取屏幕宽、高用

//

WindowManager.LayoutParams

p

=

getWindow().getAttributes()

//

获取对话框当前的参数值

//

p.height

=

(int)

(d.getHeight()

*

0.6)

//

高度设置为屏幕的0.6

//

p.width

=

(int)

(d.getWidth()

*

0.65)

//

宽度设置为屏幕的0.95

//

dialogWindow.setAttributes(p)

1. 如果您是直接从资源值转换: int width = getResources().getDimensionPixelSize(R.dimen.popup_width)

int height = getResources().getDimensionPixelSize(R.dimen.popup_height)

getDialog().getWindow().setLayout(width, height)

然后在你的布局中指定match_parent的对话框: android:layout_width="match_parent"

android:layout_height="match_parent"

你只需要担心一个地方。它并不完美,但至少它适用于有一个RelativeLayout作为你的对话框的布局文件的根目录。

2. 我有一个固定大小的定义在XML主要布局(LinearLayout中在我的情况)以下内容:

android:layout_width="match_parent"

android:layout_height="match_parent"

android:minWidth="1000dp"

android:minHeight="450dp"

3. 你可以在下面的代码从Java布局设置宽度和高度。 final AlertDialog alertDialog = alertDialogBuilder.create()

final WindowManager.LayoutParams WMLP = alertDialog.getWindow().getAttributes()

WMLP.gravity = Gravity.TOP

WMLP.y = mActionBarHeight

WMLP.x = getResources().getDimensionPixelSize(R.dimen.unknown_image_width)

alertDialog.getWindow().setAttributes(WMLP)

alertDialog.show()

4. 在我的情况下工作的唯一的事情是该解决方案在这里指出:

从阿迪尔博客文章片段: @Override

public void onStart()

{

super.onStart()

// safety check

if (getDialog() == null)

return

int dialogWidth = ... // specify a value here

int dialogHeight = ... // specify a value here

getDialog().getWindow().setLayout(dialogWidth, dialogHeight)

// ... other stuff you want to do in your onStart() method

}

5. 我固定它设置根布局 int width = activity.getResources().getDisplayMetrics().widthPixels

int height = activity.getResources().getDisplayMetrics().heightPixels

content.setLayoutParams(new LinearLayout.LayoutParams(width, height))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11536793.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存