当前位置: 代码迷 >> Android >> Android惯用的五种弹出对话框
  详细解决方案

Android惯用的五种弹出对话框

热度:67   发布时间:2016-04-28 01:57:05.0
Android常用的五种弹出对话框

  一个Android开发中常用对话框的小例子,共有五种对话框:普通弹出对话框,单选对话框,多选对话框,输入对话框及进度条样式对话框:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


    <Button
        android:id="@+id/common_dialog"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="普通对话框"
        android:textSize="16sp"
        android:layout_marginTop="10dp" />


    <Button
        android:id="@+id/radio_dialog"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="单选对话框"
        android:textSize="16sp"
        android:layout_marginTop="10dp"  />


    <Button
        android:id="@+id/check_dialog"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="多选对话框" 
        android:textSize="16sp"
        android:layout_marginTop="10dp" />


    <Button
        android:id="@+id/input_dialog"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="输入文字对话框" 
        android:textSize="16sp"
        android:layout_marginTop="10dp" />


    <Button
        android:id="@+id/progress_dialog"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="进度条对话框" 
        android:textSize="16sp"
        android:layout_marginTop="10dp" />


</LinearLayout>

下面是输入内容的简单布局activity_input.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />


    <EditText
        android:id="@+id/uname"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />


    <EditText
        android:id="@+id/upass"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />


</LinearLayout>

代码及注释:

public class MainActivity extends Activity implements OnClickListener {
/**单选框模拟标题 大学*/
private final static int CHECKED_ENU = 0;
/**单选框模拟标题  高中*/
private final static int CHECKED_SEL = 1;
/**单选框模拟标题  初中*/
private final static int CHECKED_CHU = 2;
/**复选按钮状态为全选 */
private boolean[] checked = { true, true, true, false };
/**模拟的进度值 */
private int progressNumber;
/**进度对话框 */
private ProgressDialog progressDialog;
/**对应按钮*/
private Button commonBtn, radioBtn, checkBtn, inputBtn, progressBtn;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
initListeners();
}


/**初始化UI控件*/


private void initViews() {
this.commonBtn = (Button) findViewById(R.id.common_dialog);
this.radioBtn = (Button) findViewById(R.id.radio_dialog);
this.checkBtn = (Button) findViewById(R.id.check_dialog);
this.inputBtn = (Button) findViewById(R.id.input_dialog);
this.progressBtn = (Button) findViewById(R.id.progress_dialog);
}


/**注册按钮监听事件*/
private void initListeners() {
this.commonBtn.setOnClickListener(this);
this.radioBtn.setOnClickListener(this);
this.checkBtn.setOnClickListener(this);
this.inputBtn.setOnClickListener(this);
this.progressBtn.setOnClickListener(this);
}


/**普通对话框 */
private Dialog buildAlertDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("对话框");
builder.setMessage("您的密码不对!!");


ImageView imageView = new ImageView(this);
imageView.setImageResource(R.drawable.mm1);
/**设置背景图片*/
builder.setView(imageView);
/**左边按钮*/
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setTitle("您点击的是左边确定按钮!");
}
});
/**中间按钮*/
builder.setNeutralButton("详情", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setTitle("您点击的是中间详情按钮!");
}
});
/**右边按钮*/
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
setTitle("您点击的是右边取消按钮!");
}
});
return builder.create();
}


/**单选按钮弹出框 */
private Dialog buildAlertDialog_radio() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("对话框");
/**单选按钮,默认高中被选中*/
builder.setSingleChoiceItems(new String[] { "大学", "高中", "初中", "小学" }, 1, new DialogInterface.OnClickListener() {


@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
switch (which) {
case CHECKED_ENU:
setTitle("大学");
break;
case CHECKED_SEL:
setTitle("高中");
break;
case CHECKED_CHU:
setTitle("初中");
break;
default:
setTitle("小学");
break;
}
}
});


builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setTitle("您点击的是左边确定按钮!");
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setTitle("您点击的是右边取消按钮!");
}
});
return builder.create();
}


/**可以多选按钮弹出框 */
private Dialog buildAlertDialog_checkbox() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("对话框");
/**复选按钮*/
builder.setMultiChoiceItems(new String[] { "大学", "高中", "初中", "小学" }, checked, new DialogInterface.OnMultiChoiceClickListener() {


@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
setTitle("which=" + which + "-----" + "isChecked=" + isChecked);
}
});


builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setTitle("您点击了确定按钮!");
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
setTitle("您点击的是了取消按钮!");
}
});
return builder.create();
}


/**含可以输入文本的弹出框 */
private Dialog buildAlertDialog_input() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("对话框");
LayoutInflater inflater = LayoutInflater.from(this);
builder.setView(inflater.inflate(R.layout.activity_input, null));
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setTitle("您点击的是确定按钮!");
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setTitle("您点击的是取消按钮!");
}
});
return builder.create();
}


/**进度对话框 */
private Dialog buildAlertDialog_progress() {
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("进度条");
progressDialog.setMessage("正在下载...........");
/**进度条样式 */
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
/**模糊效果 */
progressDialog.setIndeterminate(false);
return progressDialog;
}


/**每隔0.3秒更新一次进度 */
public void updateProgress() {
new Thread() {
@Override
public void run() {
try {
while (progressNumber <= 100) {
progressDialog.setProgress(progressNumber++);
Thread.sleep(300);
super.run();
}
/**下载完后,关闭下载框 */
progressDialog.cancel();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}


@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.common_dialog:
buildAlertDialog().show();
break;
case R.id.radio_dialog:
buildAlertDialog_radio().show();
break;
case R.id.check_dialog:
buildAlertDialog_checkbox().show();
break;
case R.id.input_dialog:
buildAlertDialog_input().show();
break;
case R.id.progress_dialog:
buildAlertDialog_progress().show();
updateProgress();
break;
default:
break;
}
}
}

  相关解决方案