自定义AlertDialog通常只需要自定义内容区域即可,标题和底部Action Button可以不需要自定义。AlertDialog主要提供setCustomTitle()和setView();两个方法类自定义标题和内容,并没有提供自定义Action Button的方法。自定义的时候尤其要注意每次AlertDialog打开的时候都需要使用一个新的View对象
案例
R.layout.dialog_layout布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:padding="@dimen/activity_horizontal_margin">
<TextView
android:id="@+id/dialogT1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/dialogCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="取消" />
<Button
android:id="@+id/dialogOk"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="确定" />
</LinearLayout>
</LinearLayout>
java文件
package com.hzj163.mycustomdialog;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
//dialog
AlertDialog alertDialog;
//dialog的布局
View customDialogView;
//dialog的布局里面的按钮对象
Button dialogCancel;
//dialog的布局里面的按钮对象
Button dialogOk;
//dialog的布局里面的文本对象
TextView dialogT1;
//Activity的布局里面的文本对象
TextView t1;
//dialog的布局里面的按钮对象使用的点击事件
View.OnClickListener onClickListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实例化Activity的布局里面的文本对象
//这里注意是使用this对象的findViewById方法
//因为t1对象在活动的布局里面
t1 = (TextView) this.findViewById(R.id.t1);
//实例化dialog的布局里面的按钮对象的事件
onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.dialogCancel:
dialogCancel();
break;
case R.id.dialogOk:
dialogOk();
break;
}
}
};
}
//dialog的布局里面的确定按钮事件触发
private void dialogOk() {
t1.setText(dialogT1.getText());
alertDialog.dismiss();
}
//dialog的布局里面的取消按钮事件触发
private void dialogCancel() {
Log.i("hzj", "dialogCancel");
alertDialog.dismiss();
}
//打开dialog
public void btn1(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// builder.setCustomTitle()
builder.setTitle("自定义dialog,自定义内容和按钮");
//自定义中间内容数据部分
//注意:自定义的View必须每次显示dialog的时候重新给出对象
builder.setView(getView());
alertDialog = builder.create();
alertDialog.show();
}
public View getView() {
//每次设置dialog的自定义View的时候都需要重新从xml文件获取出来一个新的View对象
customDialogView = LayoutInflater.from(this).inflate(R.layout.dialog_layout, null);
//实例化dialog布局里面的组件,使用customDialogView对象的findViewById
dialogT1 = (TextView) customDialogView.findViewById(R.id.dialogT1);
dialogCancel = (Button) customDialogView.findViewById(R.id.dialogCancel);
dialogCancel.setOnClickListener(onClickListener);
dialogOk = (Button) customDialogView.findViewById(R.id.dialogOk);
dialogOk.setOnClickListener(onClickListener);
dialogT1.setText("你好呀");
//返回布局对象
return customDialogView;
}
}