Android Dialog

自定义AlertDialog

  自定义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;
    }

}