【Android】Dialog确定和删除按钮

xml代码下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <TextView
        android:id="@+id/mytext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
 
    <Button
        android:id="@+id/mybtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除" />
 
</LinearLayout>

java代码如下:

package org.lxh.demo;
 
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class Hello extends Activity {
	private Button btn = null;
 
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState); // 生命周期方法
		super.setContentView(R.layout.main); // 设置要使用的布局管理器
		this.btn = (Button) super.findViewById(R.id.mybtn);
		this.btn.setOnClickListener(new OnClickListernerImpl());
 
	}
 
	private class OnClickListernerImpl implements OnClickListener {
 
		public void onClick(View v) {
			Dialog dialog = new AlertDialog.Builder(Hello.this)
					.setIcon(R.drawable.pic_m)
					.setTitle("确定删除?")
					.setMessage("您确定要删除此信息?")
					.setPositiveButton("删除",
							new DialogInterface.OnClickListener() {
 
								public void onClick(DialogInterface arg0,
										int arg1) {
 
								}
							})
					.setNegativeButton("取消",
							new DialogInterface.OnClickListener() {
 
								public void onClick(DialogInterface arg0,
										int arg1) {
 
								}
							}).create();
        //设置显示位置 居中
		dialog.getWindow().setGravity(Gravity.CENTER);
			dialog.show();
		}
 
	}
}

效果如下
在这里插入图片描述

自定义显示图片Dialog

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        tools:ignore="ContentDescription" />

</RelativeLayout>

新建style样式

<style name="ShowImageDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>

新建ShowImageDialog继承Dialog:

public class DzShowImageDialog extends Dialog {

    private Object showImage;

    public DzShowImageDialog(Context context, Object showImage) {
        super(context, R.style.ShowImageDialog);
        this.showImage = showImage;
    }

    @SuppressLint("ResourceType")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_showimage);

        ImageView imageView = findViewById(R.id.imageView);
        MyCommon.setViewContent(imageView, showImage);

        setCanceledOnTouchOutside(true); // 设置点击屏幕或物理返回键,dialog是否消失
        Window w = getWindow();
        assert w != null;
        WindowManager.LayoutParams lp = w.getAttributes();
        lp.x = 0;
        lp.y = 40;
        onWindowAttributesChanged(lp);
        imageView.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        dismiss();
                    }
                });
    }
}

MyCommon方法

/**
	 * 设置 ImageView 的显示内容。
	 * 
	 * @param content
	 *            支持 null,Integer(ResID),Bitmap,Drawable。
	 */
	public static boolean setViewContent(ImageView view, Object content) {
		if (view == null)
			return false;

		Object tagValue = getTagValue(content);
		if (view.getTag(R.string.setTagKey_content).equse(tagValue))
			return view.getDrawable() != null;
		view.setTag(R.string.setTagKey_content, tagValue);

		Drawable real = getDrawable(view, content);
		view.setImageDrawable(real);
		return (real != null);
	}
	
	/**
	 * 为指定 View 准备其需要使用的 Drawable 对象。
	 */
	@SuppressWarnings("deprecation")
	public static Drawable getDrawable(View view, Object drawable) {
		if (view == null)
			return null;

		if (drawable == null)
			return null;

		Drawable real = null;
		try {
			if (drawable instanceof DzInteger)
				drawable = ((DzInteger) drawable).value;
			if (drawable instanceof Integer) {
				int resId = (Integer) drawable;
				if (resId == 0)
					return null;
				real = view.getResources().getDrawable(resId);
			} else if (drawable instanceof Drawable) {
				real = (Drawable) drawable;
			} else if (drawable instanceof Bitmap) {
				real = new BitmapDrawable(view.getResources(), (Bitmap) drawable);
			}
		} catch (Throwable e) {
			Log.e("", "MyCommon.getViewDrawable(.., ..) failed for %s", e.toString());
		}

		// 需要设置一下,否则在 TextView 中显示不出来
		if (real != null) {
			real.setBounds(0, 0, real.getMinimumWidth(), real.getMinimumHeight());
		}

		return real;
	}

使用示例

使用的话只需要调用 new ShowImageDialog(context , 图片).show(); 

Android Dialog对话框的七种形式的使用

1.该效果是当按返回按钮时弹出一个提示,来确保无误操作,采用常见的对话框样式。
在这里插入图片描述

       //一般的Dialog
 2     public void normalDialog(){
 3     AlertDialog.Builder bulider =new Builder(MainActivity.this);
 4     bulider.setIcon(R.drawable.ic_launcher);//在title的左边显示一个图片
 5     bulider.setTitle("提示");
 6     bulider.setMessage("你确定你要关掉它?");
 7     bulider.setPositiveButton("确定", new DialogInterface.OnClickListener() {
 8         
 9         @Override
10         public void onClick(DialogInterface dialog, int arg1) {
11             dialog.dismiss();
12             MainActivity.this.finish();
13             
14         }
15     });
16     bulider.setNegativeButton("取消", new DialogInterface.OnClickListener() {
17         
18         @Override
19         public void onClick(DialogInterface dialog, int arg1) {
20             // TODO Auto-generated method stub
21             dialog.dismiss();
22         }
23     });
24     bulider.create().show();
26 }
/******************第二种表现形式*******************///
new AlertDialog.Builder(MachineRegister.this)
 2                         .setTitle("提示")
 3                         .setMessage("设备注册成功")
 4                         .setPositiveButton("确定",
 5                                 new DialogInterface.OnClickListener() {
 6 
 7                                     public void onClick(DialogInterface dialog,
 8                                             int which) {
 9                                         // TODO Auto-generated method                                   
11 
12                                     }
13                                     //当点击返回时,就停留在本界面
14                                 })
15                          .setNegativeButton("返回", 
16                                  new DialogInterface.OnClickListener() {
17 
18                                         public void onClick(DialogInterface dialog,
19                                                 int which) {
20                                          
21                                         }
22                             
23 
24                                     }).show();

** 2.改变了对话框的图表,添加了三个按钮**
在这里插入图片描述

//三个按钮的对话框
 2     public void sanDialog(){
 3         AlertDialog.Builder bulider =new Builder(MainActivity.this);
 4         bulider.setIcon(R.drawable.ic_launcher);//在title的左边显示一个图片
 5         bulider.setTitle("提示");
 6         bulider.setMessage("你确定你要关掉它?");
 7         //最左边的按钮(positive :积极地)
 8         bulider.setPositiveButton("确定", new DialogInterface.OnClickListener() {
 9             
10             @Override
11             public void onClick(DialogInterface dialog, int arg1) {
12                 dialog.dismiss();
13                 MainActivity.this.finish();
14                 
15             }
16         });
17         //最右边的钮(negative:消极的)
18         bulider.setNegativeButton("取消", new DialogInterface.OnClickListener() {
19             
20             @Override
21             public void onClick(DialogInterface dialog, int arg1) {
22                 // TODO Auto-generated method stub
23                 dialog.dismiss();
24             }
25         });
26         //中间的钮
27         bulider.setNeutralButton("逗你玩", new DialogInterface.OnClickListener() {
28             
29             @Override
30             public void onClick(DialogInterface arg0, int arg1) {
31                 // TODO Auto-generated method stub
32                 
33             }
34         });
35         bulider.create().show();
36         
38     }  

3.信息内容是一个简单的View类型
在这里插入图片描述

//信息内容是一个简单的View类型
 2     public void shuruDialog(){
 3         AlertDialog.Builder builder =new Builder(MainActivity.this);
 4         builder.setIcon(R.drawable.ic_launcher);
 5         builder.setTitle("请输入");
 6         
 7         //放进去任意简单的view
 8         builder.setView(new EditText(this));  
 9         builder.setPositiveButton("确定", null);
10         builder.setNegativeButton("取消", null);
11         
12         builder.create().show();
13     }

4.信息内容是一组单选框
在这里插入图片描述

//信息内容是单选框
 2     public void danxuanDialog(){
 3         AlertDialog.Builder builder =new Builder(MainActivity.this);
 4         builder.setIcon(R.drawable.ic_launcher);
 5         builder.setTitle("单选框");
 6           //定义单选框        
 7         builder.setSingleChoiceItems(new String[]{"item1","item2"} ,0, new DialogInterface.OnClickListener() {
 8             
 9             @Override
10             public void onClick(DialogInterface arg0, int arg1) {
11                 //对选择项绑定事件
12                 
13             }
14         }); 
15         builder.setNegativeButton("取消", null);
16         
17         builder.create().show();
18     }

** 5.信息内容是一组多选框**
在这里插入图片描述

//信息内容是复选框
 2     public void fuxuanDialog(){
 3         AlertDialog.Builder builder =new Builder(MainActivity.this);
 4         builder.setIcon(R.drawable.ic_launcher);
 5         builder.setTitle("复选框");
 6           //定义复选框        
 7         builder.setMultiChoiceItems(new String[]{"item1","item2"}, null, null);
 8         builder.setPositiveButton("确定", null);        
 9         builder.setNegativeButton("取消", null);
10         
11         builder.create().show();
12     }

6.信息内容是一组简单列表项
在这里插入图片描述

//信息内容是简单地列表项
 2     
 3     public void liebiaoDialog(){
 4         AlertDialog.Builder builder =new Builder(MainActivity.this);
 5         builder.setIcon(R.drawable.ic_launcher);
 6         builder.setTitle("列表项");
 7           //定义复选框        
 8         builder.setItems(new String[]{"item1","item2"}, null);
 9         builder.setPositiveButton("确定", null);        
10         builder.setNegativeButton("取消", null);
11         
12         builder.create().show();
13     }

7.信息内容是一个自定义的布局
在这里插入图片描述
dialog布局文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
 2  
 3   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4    android:layout_height="wrap_content" android:layout_width="wrap_content"
 5    android:background="#ffffffff" android:orientation="horizontal"
 6    android:id="@+id/dialog">
 7    <TextView android:layout_height="wrap_content"
 8      android:layout_width="wrap_content"
 9     android:id="@+id/tvname" android:text="姓名:" />
10    <EditText android:layout_height="wrap_content"
11     android:layout_width="wrap_content" android:id="@+id/etname" android:minWidth="100dip"/>
12   </LinearLayout>

** 创建dialog方法的代码如下:**

LayoutInflater inflater = getLayoutInflater();
     View layout = inflater.inflate(R.layout.dialog,
       (ViewGroup) findViewById(R.id.dialog));
     new AlertDialog.Builder(this).setTitle("自定义布局").setView(layout)
       .setPositiveButton("确定", null)
       .setNegativeButton("取消", null).show();

注意:在使用dialog增加按钮选项的时候,
bulider.setPositiveButton(“确定”, new DialogInterface.OnClickListener() {
应该是红色字体部分,而写成:
bulider.setPositiveButton(“确定”, new OnClickListener() {
往往会报错

属性设置

				.setIcon(R.drawable.yesoutbox)    //左上角图片
				.setTitle(R.string.alert_title)   //标题
				.setMessage(R.string.alert_msg)   //内容
 Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
        LinearLayout.LayoutParams cancelBtnPara = (LinearLayout.LayoutParams) button.getLayoutParams();
       /*******************************/
        //设置按钮的大小
        cancelBtnPara.height = LinearLayout.LayoutParams.WRAP_CONTENT;
        cancelBtnPara.width = LinearLayout.LayoutParams.MATCH_PARENT;
        //设置文字居中
        cancelBtnPara.gravity = Gravity.CENTER;
        //设置按钮左上右下的距离
        cancelBtnPara.setMargins(100, 20, 100, 20);
        button.setLayoutParams(cancelBtnPara);
        button.setBackground(ContextCompat.getDrawable(this, R.drawable.food_subsidy_bg));
        button.setTextColor(ContextCompat.getColor(this, R.color.white));
        button.setTextSize(16);
         /*******************************/


try {
			//获取mAlert对象
			Field mAlert = AlertDialog.class.getDeclaredField("mAlert");
			mAlert.setAccessible(true);
			Object mAlertController = mAlert.get(dialogFlatWindow);

			//获取mTitleView并设置大小颜色
			Field mTitle = mAlertController.getClass().getDeclaredField("mTitleView");
			mTitle.setAccessible(true);
			TextView mTitleView = (TextView) mTitle.get(mAlertController);
			mTitleView.setTextSize(40);
			mTitleView.setTextColor(Color.YELLOW);

			//获取mMessageView并设置大小颜色
			Field mMessage = mAlertController.getClass().getDeclaredField("mMessageView");
			mMessage.setAccessible(true);
			TextView mMessageView = (TextView) mMessage.get(mAlertController);
			mMessageView.setTextColor(Color.RED);
			mMessageView.setTextSize(40);
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		}





        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// 屏幕常亮
        //获取当前Activity所在的窗体
        Window dialogWindow = dialog.getWindow();
        //设置显示位置【上顶部】
		dialogWindow .setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
        //设置Dialog从窗体底部弹出
        dialogWindow.setGravity(Gravity.BOTTOM);
        //获得窗体的属性
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        lp.y = 20;//设置Dialog距离底部的距离
        lp.height = 800;
        lp.width = this.getWindowManager().getDefaultDisplay().getWidth();
        //设置透明度
		lp.alpha = 0.7f;
        // 将属性设置给窗体
        dialogWindow.setAttributes(lp);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值