项目中经常会用到对话框,但是系统的对话框又比较难看,因此就来实现自定义对话框。
办法很简单,就是定义一个Dialog,并自定义它的布局以及样式:
在res/layout里定义一个slt_cnt_type.xml,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/bgDialog"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:background="#0000"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical" >
<ImageView
android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/messagebox_warning" />
<TextView
android:id="@+id/title01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title"
android:textColor="#ffe9feff"
android:textSize="28px" />
</LinearLayout>
<ScrollView
android:id="@+id/ScrollView01"
android:layout_width="wrap_content"
android:layout_height="140px"
android:background="#0000" >
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0000"
android:textColor="#ffe9feff" >
</TextView>
</ScrollView>
<Button
android:id="@+id/ly1btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bn9"
android:text="Cancel"
android:gravity="center_horizontal" >
</Button>
</LinearLayout>
在res/values/style定义对话框的样式:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="dialog" parent="@android:style/Theme.Dialog">
<!-- 更换背景图片实现全透明 -->
<item name="android:windowBackground">@drawable/alert_light</item>
<!-- 屏幕背景不变暗 -->
<item name="android:backgroundDimEnabled">false</item>
<!-- 隐藏标题 -->
<item name="android:windowNoTitle">true</item>
</style>
</resources>
然后再你需要弹出的对话框的地方加上:
/* 初始化普通对话框。并设置样式 */
Dialog selectDialog = new Dialog(DialogTest.this, R.style.dialog);
selectDialog.setCancelable(true);
/* 设置普通对话框的布局 */
selectDialog.setContentView(R.layout.slt_cnt_type);
/* +2+取得布局中的文本控件,并赋值需要显示的内容+2+ */
TextView textView01 = (TextView) selectDialog
.findViewById(R.id.TextView01);
textView01
.setText("光阴似箭,日月如梭。譬如流水,不舍昼夜。时光匆匆,岁月悠悠。红尘过客,流年几许。前世今生,春去秋来。愿君惜时,比肩圣人。");
btnItem1 = (Button) selectDialog.findViewById(R.id.ly1btn1);
btnItem1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view) {
selectDialog.dismiss();//隐藏对话框
}
});
selectDialog.show();//显示对话框
这样就完成了,是不是很简单。
然后我们实现自定义进度对话框(这里为了简单清晰,就不涉及百分比了):
先在res/layout里添加进度对话框布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:layout_width="200px"
android:layout_height="120px"
android:layoutAnimation="@anim/dialog_anim_layout"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bn9"
android:gravity="center" >
<!-- 图片切换器 -->
<ImageSwitcher
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@anim/plane_progress" />
</LinearLayout>
</LinearLayout>
然后在res/anim定义图片切换器的帧图片:
<?xml version="1.0" encoding="utf-8"?>
<!-- 指定动画循环播放 oneshot设置是否循环-->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<!-- 添加多个帧 -->
<item android:drawable="@drawable/cloud4" android:duration="60" />
<item android:drawable="@drawable/cloud3" android:duration="60" />
<item android:drawable="@drawable/cloud2" android:duration="60" />
<item android:drawable="@drawable/cloud1" android:duration="60" />
<item android:drawable="@drawable/cloud" android:duration="60" />
</animation-list>
最后在代码中定义进度对话框:
/**
* 进度对话框
* @author ZOEICER
*/
public class DialogProgress extends AlertDialog{
private Handler handler = new Handler();
/**动画*/
AnimationDrawable anim;
/**图片切换器*/
ImageSwitcher imageSwitcher;
public DialogProgress(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialogprogress);
imageSwitcher = (ImageSwitcher)findViewById(R.id.image);
handler.postDelayed(new Runnable(){
@Override
public void run()
{
/*动画为图片切换器的帧动画*/
anim = (AnimationDrawable)imageSwitcher.getBackground();
anim.start();//开始动画
}
}, 500);
}
@Override
public void dismiss() {
// TODO Auto-generated method stub
super.dismiss();
anim.stop();//停止动画
}
}
然后调用:
DialogProgress dp = new DialogProgress(DialogTest.this);
dp.show();//显示对话框
下面附上源文件:
http://download.csdn.net/detail/zoeice/4399354