8种android 对话框(Dialog)使用方法详解

2019-12-10 18:51:14王振洲

2.8 自定义Dialog(图9)

 

<!-- res/layout/dialog_customize.xml-->
<!-- 自定义View -->
<LinearLayout xmlns:android="http://www.easck.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <EditText
    android:id="@+id/edit_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    />
</LinearLayout>

private void showCustomizeDialog() {
  /* @setView 装入自定义View ==> R.layout.dialog_customize
   * 由于dialog_customize.xml只放置了一个EditView,因此和图8一样
   * dialog_customize.xml可自定义更复杂的View
   */
  AlertDialog.Builder customizeDialog = 
    new AlertDialog.Builder(MainActivity.this);
  final View dialogView = LayoutInflater.from(MainActivity.this)
    .inflate(R.layout.dialog_customize,null);
  customizeDialog.setTitle("我是一个自定义Dialog");
  customizeDialog.setView(dialogView);
  customizeDialog.setPositiveButton("确定",
    new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
      // 获取EditView中的输入内容
      EditText edit_text = 
        (EditText) dialogView.findViewById(R.id.edit_text);
      Toast.makeText(MainActivity.this,
        edit_text.getText().toString(),
        Toast.LENGTH_SHORT).show();
    }
  });
  customizeDialog.show();
}

3.复写回调函数

/* 复写Builder的create和show函数,可以在Dialog显示前实现必要设置
 * 例如初始化列表、默认选项等
 * @create 第一次创建时调用
 * @show 每次显示时调用
 */
private void showListDialog() {
  final String[] items = { "我是1","我是2","我是3","我是4" };
  AlertDialog.Builder listDialog = 
    new AlertDialog.Builder(MainActivity.this){
     
    @Override
    public AlertDialog create() {
      items[0] = "我是No.1";
      return super.create();
    }
 
    @Override
    public AlertDialog show() {
      items[1] = "我是No.2";
      return super.show();
    }
  };
  listDialog.setTitle("我是一个列表Dialog");
  listDialog.setItems(items, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
      // ...To-do
    }
  });
  /* @setOnDismissListener Dialog销毁时调用
   * @setOnCancelListener Dialog关闭时调用
   */
  listDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
    public void onDismiss(DialogInterface dialog) {
      Toast.makeText(getApplicationContext(),
        "Dialog被销毁了", 
        Toast.LENGTH_SHORT).show();
    }
  });
  listDialog.show();
}