透明自定义对话框以及进度对话框的实现

项目中经常会用到对话框,但是系统的对话框又比较难看,因此就来实现自定义对话框。

办法很简单,就是定义一个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


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值