AlertDialog和自定义对话框

***AlertDialog

*常用方法:
setTitle():设置对话框的标题
setIcon():设置对话框图标
setMessage():设置对话框要传达的具体信息
setCancelable:点击对话框以外的区域是否让对话框消失
setNegativeButton(),setPositiveButton(),setNeutralButton():用来设置对话框中的按钮选项

案例效果:点击button按钮,可显示出Dialog对话框,再点击确定即可退出app,点击取消则什么都不做;或通过点击返回键也可显示出对话框

public class MainActivity extends Activity {
	private AlertDialog.Builder builder;
	private AlertDialog mydialog;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initDialog();
	}

	private void initDialog() {
		builder = new AlertDialog.Builder(this);//因为AlertDialog中的构造方法都是protect形式的,所以不能直接new创建对象,但可以调用它的内部类Builder创建
		//因为内部类Builder中方法的返回值仍然是Builder类型的所以可以采用链式调用多个方法
		builder.setTitle("警告").setIcon(R.drawable.ic_launcher).setCancelable(true).setMessage("确定退出?")
		.setNegativeButton("取消",null)
		.setPositiveButton("确定", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				finish();		
			}
		});
		mydialog = builder.create();
	}
	//设置button按钮的点击事件
	public void onClick(View v) {
		if(!mydialog.isShowing()){
			mydialog.show();
		}
	}
	//设置某按键被点击时的方法
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if((keyCode == KeyEvent.KEYCODE_BACK)&&(!mydialog.isShowing())){//这里设置返回键被点击时的操作
			mydialog.show();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}
}

***自定义Dailog

主要使用setCustomTitle()方法和setView方法
有一点要注意的是主体内容只能有一种,比如:设置了SetMessage不能再设置SetAdapter或SetView。

自定义标题布局title_layout.xml:

 <ImageView 
    android:id="@+id/iv"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:src="@drawable/ic_launcher"/>

<TextView 
    android:id="@+id/tv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="24sp"
    android:padding="10dp"
    android:text="自定义对话框"/>

具体内容布局:content_layout.xml:

<EditText
    android:id="@+id/tv2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="请输入用户名"
    android:background="@drawable/content_shape"
    android:textSize="20sp"
    />
<EditText
    android:id="@+id/tv3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="请输入密码"
    android:background="@drawable/content_shape"
    android:layout_marginTop="10dp"
    android:inputType="textPassword"
    android:textSize="20sp"/>

其中的背景边框也是自己设计的,通过在res文件夹下创建一个名为drawable的folder文件,然后在其中添加一个content.shape.xml文件,注意添加时需要选中shape选项

	<!--圆角 -->
	<corners android:radius="10dp"/>
	<!--描边  -->
	<stroke 
		android:width="1dp"
		android:color="#ff3366"/>
</shape>

MainActivity.java中:

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void showDialog(View view){
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		View customTitleView = getLayoutInflater().inflate(R.layout.title_layout, null);
		builder.setCustomTitle(customTitleView);
		
		View contentView = getLayoutInflater().inflate(R.layout.content_layout, null);
		builder.setView(contentView);
		builder.setCancelable(true);
		builder.setPositiveButton("确定", null).setNegativeButton("取消", null);
		builder.create().show();
	}
}

原文地址:https://www.cnblogs.com/SanguineBoy/p/9805265.html