还是先从最简单的开始吧,然后一步一步的扩展。为了保证软件上所谓的低耦合度和可重用性,这里不得不需要单独建立一个类CustomerDialog,然后继承AlertDialog
public class CustomerDialog extends AlertDialog { } 复制代码然后添加一个带Context参数的构造器,context(上下文)通俗点讲一般是指归属于那个,这里就归属于调用的那个Acitivity,也就是说这个对话框是针对调用的那个Activity
public CustomerDialog(Context context) { super(context); this.context = context; } 复制代码接下来需要对AlertDialog的 onCreate方法覆盖,否则在外面就无法获得你创建的那个自定义对话框的内容了(当然你也可以直接在构造方法里调用setView,当这样一来耦合度就增加了),然后把自己的自定义内容通过setView关联进去。
@Override protected void onCreate(Bundle savedInstanceState) { TextView textView = new TextView(context); textView.setText("这是一个自定义对话框"); textView.setTextSize(24); textView.setTextColor(Color.BLACK); setView(textView); super.onCreate(savedInstanceState); } 复制代码具体实现:第一步:res/layout/main.xml定义一个button按钮,用来点击后弹出自定义对话框
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="显示自定义对话框" /> </LinearLayout> 复制代码第二步:创建自定义对话框类src/com/dialog/ui/CustomerDialog.java
package com.dialog.ui; import android.app.AlertDialog; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.widget.TextView; public class CustomerDialog extends AlertDialog { private Context context = null; public CustomerDialog(Context context) { super(context); this.context = context; } @Override protected void onCreate(Bundle savedInstanceState) { //此处仅一个简单的TextView,可以扩展到自定义xml里面 TextView textView = new TextView(context); textView.setText("这是一个自定义对话框"); textView.setTextSize(24); textView.setTextColor(Color.BLACK); setView(textView); super.onCreate(savedInstanceState); } } 复制代码第三步:在创建一个Activitysrc/com/dialog/activity/CustomerDialogActivity.java
package com.dialog.activity; import android.app.Activity; import android.app.Dialog; import android.os.Bundle; import android.view.View; import android.widget.Button; import com.dialog.ui.CustomerDialog; public class CustomerDialogActivity extends Activity { private final int CUSTOMER_DIALOG = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button); View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View view) { showDialog(CUSTOMER_DIALOG); } }; button.setOnClickListener(listener); } @Override protected Dialog onCreateDialog(int id) { CustomerDialog dialog = null; switch(id) { case CUSTOMER_DIALOG: dialog = new CustomerDialog(CustomerDialogActivity.this); dialog.setTitle("自定义对话框"); dialog.setIcon(R.drawable.icon); break; } return dialog; } } 复制代码上个丑陋的效果图(源码就不提供了)
10 小时前 上传 下载附件 (21.41 KB)接下来将继续扩展到自定义xml里面,未完待续