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);