700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android自定义Dialog及与Activity的交互

Android自定义Dialog及与Activity的交互

时间:2024-04-01 20:48:20

相关推荐

Android自定义Dialog及与Activity的交互

一个小项目,需要用到一个自定义的Dialog,Dialog中需要一个ImageView用于显示表情图片,一个TextView用来显示提示文本,点击任何地方关闭Dialog,同时关闭打开这个Dialog的Activity。

效果如下图:

实现过程如下:

一、定义一个布局文件(dialog_custom.xml)

代码如下:

———————————————————————————————

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:id="@+id/layout_dialog"android:layout_width="330dip"android:layout_height="150dip"android:background="@drawable/shape_conner_white_bg" android:orientation="horizontal"><ImageView android:id="@+id/im_toast_icon"android:layout_width="100dip" android:layout_height="100dip" android:background="@null" /><TextView android:id="@+id/tv_toast_content" android:layout_width="180dip" android:layout_height="wrap_content" android:layout_marginTop="20dip" android:text="" android:textColor="#2f97e9" android:textSize="18sp" android:singleLine="false"android:gravity="center_vertical"/></LinearLayout>

———————————————————————————————

内容很简单,就一个LinearLayout布局,里面有一个ImageView,一个TextView。

LinearLayout为了实现圆角矩形的效果,用了个shape背景。代码如下(shape_conner_white_bg.xml):

———————————————————————————————

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="/apk/res/android" ><corners android:radius="4dp" /><solid android:color="@android:color/white" /></shape>

———————————————————————————————

二、自定义DialogUtils类,代码如下:

———————————————————————————————

import android.app.Activity;import android.app.Dialog;import android.content.Context;import android.content.DialogInterface;import android.content.DialogInterface.OnDismissListener;import android.graphics.drawable.Drawable;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.WindowManager;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;public class DialogUtils { private static TextView tipTextView; private static Dialog MyDialog;private static ImageView image_Icon;private static LinearLayout layout_dialog;//Dialog有三个参数,Contex不用多说,msg是提示文本,icon_draw是需要显示的图标。public static void showCompleteDialog(final Context context,String msg,Drawable icon_draw){ LayoutInflater inflater = LayoutInflater.from(context); View v = inflater.inflate(R.layout.dialog_custom, null);// 得到加载viewtipTextView = (TextView) v.findViewById(R.id.tv_toast_content);// 提示文字 image_Icon=(ImageView)v.findViewById(R.id.im_toast_icon);//提示图标tipTextView.setText(msg);// 设置加载信息 image_Icon.setImageDrawable(icon_draw);layout_dialog=(LinearLayout) v.findViewById(R.id.layout_dialog);layout_dialog.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v){MyDialog.dismiss();}});MyDialog = new Dialog(context, R.style.MyDialogStyle);// 创建自定义样式dialogMyDialog.setCancelable(true); // 按“返回键”可以关闭Dialog MyDialog.setCanceledOnTouchOutside(true); // 点击加载框以外的区域可以关闭Dialog //定义MyDialog关闭时同时关闭ActivityMyDialog.setOnDismissListener(new OnDismissListener() {@Overridepublic void onDismiss(DialogInterface dialog) {//MyDialog.getOwnerActivity().finish();Activity act=(Activity)context;act.finish();MyDialog.dismiss();}});MyDialog.setContentView(v, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));// 设置布局 /** *将显示Dialog的方法封装在这里面 */ Window window = MyDialog.getWindow(); WindowManager.LayoutParams lp = window.getAttributes(); lp.width = 900; lp.height = 360; lp.y=-150; window.setGravity(Gravity.CENTER_HORIZONTAL); window.setAttributes(lp); MyDialog.show(); }}

其中MyDialogStyle是在res/values/style中定义的:

<style name="MyDialogStyle"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>

———————————————————————————————

这样就OK了,在需要打开Dialog的地方添加以下代码就行了:

DialogUtils.showCompleteDialog(getContext(),"不好意思,你输给了手机AI!",getResources().getDrawable(R.drawable.lost));

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。