以下是使用大全:

```java

public class MainActivity extends ListActivity {

private List mList;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

String[] array = {"普通Dialog", "确定取消对话框 AlertDialog", "单选对话框 AlertDialog", "多选对话框 AlertDialog",

"自定义View的Dialog---注意:不同主题下显示效果大不相同", "自定义View的AlertDialog---注意:不同主题下显示效果大不相同",

"自定义Dialog的位置", "自定义AlertDialog的位置", "进度条对话框 ProgressDialog", "带进度的进度条对话框 ProgressDialog"};

for (int i = 0; i < array.length; i++) {

array[i] = i + "、" + array[i];

}

mList = new ArrayList<>(Arrays.asList(array));

setListAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mList));

}

@Override

protected void onListItemClick(ListView l, View v, int position, long id) {

switch (position) {

case 0://普通Dialog

showDialog(this);

break;

// 其他case省略,可以参考上面给出的代码进行实现

}

}

}

```

以下是重构后的代码:

```java

private void showDialog(int type) {

switch (type) {

case 1: // 确定取消对话框 AlertDialog

showSureOrCancleDialog(this);

break;

case 2: // 单选对话框 AlertDialog

showSingleChoiceDialog(this);

break;

case 3: // 多选对话框 AlertDialog

showMultiChoiceDialog(this);

break;

case 4: // 自定义View的Dialog---注意:不同主题下显示效果大不相同

showCustomDialog(this);

break;

case 5: // 自定义View的AlertDialog---注意:不同主题下显示效果大不相同

showCustomAlertDialog(this);

break;

case 6: // 自定义Dialog的位置

showDialogAnyWhere(this);

break;

case 7: // 自定义AlertDialog的位置

showAlertDialogAnyWhere(this);

break;

case 8: // 进度条对话框 ProgressDialog

showSimpleProgressDialog(this);

break;

case 9: // 带进度的进度条对话框 ProgressDialog

showProgressDialog(this);

break;

default:

break;

}

}

// 对于基本没有什么API可用的对话框,可以直接调用showDialog方法并传入相应的类型参数。例如,如果要显示一个确定取消对话框,可以调用:showDialog(1)。

public static void showSureOrCancleDialog(Context context) {

...

}

```

解析:这是一个用于创建并显示AlertDialog和单选对话框的代码片段,分别包含了标题、内容、取消按钮、确定按钮和选择性别的功能。

重构后的代码如下:

```java

// 创建并显示带标题和内容的AlertDialog

public static void showAlertDialog(final Context context) {

AlertDialog.Builder builder = new AlertDialog.Builder(context).setTitle("标题").setMessage("内容");

builder.setCancelable(false); // 点击返回键或对话框外部时是否消失,默认为true

builder.setNegativeButton("取消", null); // 设置取消按钮

builder.setPositiveButton("确定", new OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

Toast.makeText(context, "确定被点击了", Toast.LENGTH_SHORT).show();

}

});

builder.create().show();

}

// 创建并显示单选对话框

public static void showSingleChoiceDialog(final Context context) {

String[] items = {"男", "女", "未知"};

AlertDialog.Builder builder = new AlertDialog.Builder(context).setTitle("请选择您的性别");

builder.setSingleChoiceItems(items, -1, new OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

Toast.makeText(context, "您的性别:" + items[which], Toast.LENGTH_SHORT).show();

}

});

builder.create().show();

}

```

```java

}).setPositiveButton("确定", null).setNegativeButton("取消", null);

builder.create().show();

}

/**多选对话框*/

public static void showMultiChoiceDialog(final Context context) {

final String[] items = {"苹果", "梨", "菠萝", "香蕉", "黄瓜"};

final boolean[] result = new boolean[] {true, false, true, false, false};//对应条目默认是否被选中

AlertDialog.Builder builder = new AlertDialog.Builder(context).setTitle("请选择你最爱吃的水果");//

.setMultiChoiceItems(items, result, new OnMultiChoiceClickListener() {

public void onClick(DialogInterface dialog, int which, boolean isChecked) {

String inf = "";

if (isChecked) {

inf = " 被选中了";

} else {

inf = " 被取消选中了";

}

Toast.makeText(context, items[which] + inf, Toast.LENGTH_SHORT).show();

result[which] = isChecked;

}

})//

.setPositiveButton("提交", new OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

StringBuffer sb = new StringBuffer();

for (int i = 0; i < result.length; i++) {

sb.append(result[i] ? items[i] + " " : "");

}

Toast.makeText(context, "你选择了:" + sb.toString(), Toast.LENGTH_SHORT).show();

}});//设置无确认按钮

builder.create().show();

}

```

以下是重构后的内容,并保持了段落结构:

```java

// 遍历 result 数组,将选中的项添加到 sb 中

for (int i = 0; i < result.length; i++) {

if (result[i]) {

sb.append(items[i] + " ");

}

}

// 显示选中的项

Toast.makeText(context, "您选中了: " + sb.toString(), Toast.LENGTH_SHORT).show();

builder.create().show();

}

// 自定义View的Dialog。注意:不同主题下显示效果大不相同*******************************************************

public static void showCustomDialog(Context context) {

Dialog dialog = new Dialog(context);

dialog.setContentView(R.layout.layout_dialog);

dialog.show();

}

public static void showCustomAlertDialog(Context context) {

new AlertDialog.Builder(context).setView(R.layout.layout_dialog).create().show();

}

// 自定义对话框显示位置*********************************************************************************

public static void showDialogAnyWhere(Context context) {

Dialog dialog = new Dialog(context);

dialog.setContentView(R.layout.layout_dialog2);

Window dialogWindow = dialog.getWindow(); // 获取对话框窗口对象

// 在此处添加代码以设置对话框的位置和大小等属性

}

```

重构后的代码如下:

```java

public static void setDialogProperties(Context context, int color, int xOffset, int yOffset, int height, float alpha) {

AlertDialog dialog = new AlertDialog.Builder(context).setView(R.layout.layout_dialog2).create();

Window dialogWindow = dialog.getWindow(); // 获取对话框窗口对象

dialogWindow.setBackgroundDrawable(new ColorDrawable(color));

dialogWindow.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);//修改对话框的布局设置,和mLayoutParams.gravity属性的值一致

WindowManager.LayoutParams mLayoutParams = dialogWindow.getAttributes();//获取对话框参数对象

mLayoutParams.x = xOffset; // 表示相对于【原始位置】的偏移,当为Gravity.LEFT时就表示相对左边界的偏移,正值右移,负值忽略

mLayoutParams.y = yOffset; //当为Gravity.BOTTOM时正值上移,负值忽略

mLayoutParams.height = height; //宽高设置是否有效也是和主题有关的

mLayoutParams.alpha = alpha; // 透明度

dialogWindow.setAttributes(mLayoutParams);

}

public static void showAlertDialogAnyWhere(Context context) {

setDialogProperties(context, Color.YELLOW, 0, 20, 900, 0.8f);

AlertDialog dialog = new AlertDialog.Builder(context).setView(R.layout.layout_dialog2).create();

dialog.show();

}

```

```java

// 获取对话框参数对象

WindowManager.LayoutParams mLayoutParams = dialogWindow.getAttributes();

// 设置相对位置偏移

mLayoutParams.x = 0; // 当为Gravity.LEFT时就表示相对左边界的偏移,正值右移,负值忽略

mLayoutParams.y = 20; // 当为Gravity.BOTTOM时正值上移,负值忽略

mLayoutParams.height = 900; // 宽高设置是否有效也是和主题有关的

mLayoutParams.alpha = 0.8f; // 透明度

dialogWindow.setAttributes(mLayoutParams);

// 显示进度条对话框

ProgressDialog pd = new ProgressDialog(context);

pd.setTitle("提醒");

pd.setMessage("正在加载数据,请稍等...");

pd.setCancelable(false);

pd.show();

new Thread() {

public void run() {

SystemClock.sleep(2000);

pd.dismiss(); // 在子进程中关闭进度条。旋转屏幕后ProgressDialog被销毁了,而此线程会继续运行,当调用pd.dismiss()时由于pd为空,所以会导致异常。Activity直接挂掉!

}

}.start();

```

您好,以下是自定义Dialog的布局1的代码:

```xml

android:layout_width="180dp"

android:layout_height="400dp"

android:background="@android:color/holo_blue_light"

android:gravity="center_horizontal"

android:orientation="vertical">

... />

```

自定义布局2的代码如下:

```xml

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@android:color/holo_blue_light"

android:gravity="center_horizontal"

android:orientation="vertical">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/ic_launcher" />

android:id="@+id/et_username"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

android:id="@+id/et_password"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="4dp"

android:inputType="textPassword" />

```

在Android布局文件中,EditText的使用方法是将android:id设置为自定义的ID,然后在Java代码中通过findViewById方法获取该控件,并设置其属性。AlertDialog是Dialog的一个直接子类,可以通过AlertDialog的静态内部类Builder来创建。一个AlertDialog可以有两个以上的Button,可以对一个AlertDialog设置相应的信息,比如title、massage等等。不能直接通过AlertDialog的构造函数来生产一个AlertDialog(AlertDialog所有的构造方法都是protected),只能通过AlertDialog的静态内部类Builder来创建 。