//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))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)