以下是使用大全:
```java
public class MainActivity extends ListActivity {
private List
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来创建 。