读书人

android 可自定义大小跟位置的Dialog

发布时间: 2012-10-21 09:00:07 作者: rapoo

android 可自定义大小和位置的Dialog

我实现了一个可自定义大小和位置的Dialog:CustDialog,其父类为AlertDialog

使用示例:

TestDialog t = newTestDialog(AndroidTestActivity.this,R.style.dialog); //TestDialog是CustDialog的子类

t.setLayoutResID(R.layout.chat_dialog); //设置资源布局,,在show()方法前调用

t.setPosition(x/2, y); // 设置dialog位置,在show()方法前调用

t.setRegion(150, 200); // 设置dialog大小,在show()方法前调用

t.show(); // 显示dialog

一些说明:

1, Dialog布局文件必须使用LinearLayout,其id必须是layout。

例如:res/layout/chat_dialog.xml

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

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

android:orientation="vertical"android:layout_width="50dp"

android:layout_height="wrap_content"android:id="@id/layout"

android:background="@color/red">

<Button android:id="@+id/btn" android:text="Button"

android:layout_width="match_parent" android:layout_height="wrap_content" />

<TextView android:id="@+id/tv" android:text="initial"

android:layout_width="match_parent" android:layout_height="wrap_content" />

</LinearLayout>

原因:layout是CustDialog实现自定义大小所必须的,使用处在CustDialog.onCreate里,如下:

layout = (LinearLayout)findViewById(R.id.layout);

android.view.ViewGroup.LayoutParams layoutParams = layout.getLayoutParams();

layoutParams.width = this.getWidth();

layoutParams.height = this.getHeight();

layout.setLayoutParams(layoutParams); // 设定大小

它定义在文件res/values/ids.xml里,如下

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

<resources>

<item type="id" name="layout" />

</resources>

2, Dialog的style定义在res/values/style.xml里,如下:

<?xmlversion="1.0" encoding="utf-8"?>

<resources>

<stylename="dialog" parent="@android:style/Theme.Dialog">

<item name="android:windowFrame">@null</item> <!--边框 -->

<item name="android:windowIsFloating">true</item> <!--是否浮现在activity之上 -->

<itemname="android:windowIsTranslucent">false</item><!--半透明 -->

<item name="android:windowNoTitle">true</item><!--无标题 -->

<itemname="android:windowBackground">@color/transparent</item><!--背景透明 -->

<itemname="android:backgroundDimEnabled">false</item><!--模糊 -->

</style>

</resources>

其中属性的中文注释或许不准确,另外还有很多其他属性可以设置,

详细可参考 android源码包中的framwworks/base/policy/src/android/internal/policy/imple/PhoneWindow.java里的函数generateLayout的代码实现,这个是无二义性的!

例子附件:http://download.csdn.net/detail/imyfriend/4083958

读书人网 >Android

热点推荐