六种形式的Dialog 源码下载地址:http://download.youkuaiyun.com/detail/v587ge/8238259
先来一段XML代码 非常简单 六个按钮
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/changebtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="提示对话框" />
<Button
android:id="@+id/contentbtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="文本框对话框" />
<Button
android:id="@+id/listbtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="简单列表对话框" />
<Button
android:id="@+id/radiolistbtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="单选项列表对话框" />
<Button
android:id="@+id/mutlistbtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="多选选列表对话框" />
<Button
android:id="@+id/diybtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="自定义对话框" />
</LinearLayout>
功能实现代码如下:
package com.andieguo.dialogdemo;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class DialogActivity extends Activity {
private Button changebtn;
private Button contentbtn;
private Button listbtn;
private Button mutlistbtn;
private Button radiolistbtn;
private Button diybtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
changebtn = (Button) findViewById(R.id.changebtn);
contentbtn = (Button) findViewById(R.id.contentbtn);
listbtn = (Button) findViewById(R.id.listbtn);
radiolistbtn = (Button) findViewById(R.id.radiolistbtn);
mutlistbtn = (Button) findViewById(R.id.mutlistbtn);
diybtn = (Button) findViewById(R.id.diybtn);
changebtn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new AlertDialog.Builder(DialogActivity.this).setIcon(android.R.drawable.btn_star)
.setTitle("调查").setMessage("你喜欢海贼王吗?")
.setPositiveButton("喜欢",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
Toast.makeText(DialogActivity.this,
"我很喜欢海贼王", Toast.LENGTH_SHORT).show();
}
})
.setNeutralButton("一般",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
Toast.makeText(DialogActivity.this,
"我对海贼王不怎么感兴趣", Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("不喜欢",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
Toast.makeText(DialogActivity.this,
"我一点也不喜欢海贼王", Toast.LENGTH_SHORT).show();
}
}).show();// show很关键
}
});
/**
* 在对话框中添加一个文本框,点击确定后获取文本框里的内容
*/
contentbtn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final EditText editText = new EditText(DialogActivity.this);
new AlertDialog.Builder(DialogActivity.this).setTitle("请输入").setView(editText).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(DialogActivity.this, "您输入的内容是:"+editText.getText(), Toast.LENGTH_SHORT).show();
}
}).setNegativeButton("取消", null).show();
}
});
/**
* 在对话框中列出数组,让用户选择。
*/
listbtn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final String[] items = new String[]{"北京","上海","深圳"};
new AlertDialog.Builder(DialogActivity.this).setTitle("城市列表").setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
switch (which) {
case 0:
Toast.makeText(DialogActivity.this, "您选中了:"+items[0], Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(DialogActivity.this, "您选中了:"+items[1], Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(DialogActivity.this, "您选中了:"+items[2], Toast.LENGTH_SHORT).show();
break;
}
}
}).show();
}
});
/**
* 在对话框中列出单选按钮,让用户选择。
*/
radiolistbtn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final String[] items = new String[]{"苹果","香蕉","梨子"};
new AlertDialog.Builder(DialogActivity.this).setTitle("单选框").setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
switch (which) {
case 0:
Toast.makeText(DialogActivity.this, "您选中了:"+items[0], Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(DialogActivity.this, "您选中了:"+items[1], Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(DialogActivity.this, "您选中了:"+items[2], Toast.LENGTH_SHORT).show();
break;
}
}
}).setNegativeButton("取消", null).show();
}
});
/**
* 在对话框中列出复选框,让用户选择
*/
mutlistbtn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final String[] items = new String[]{"音乐","电影","书籍"};
final boolean[] selected = new boolean[]{true,false,true};
new AlertDialog.Builder(DialogActivity.this).setTitle("复选框")
.setMultiChoiceItems(items,selected, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// TODO Auto-generated method stub
selected[which] = isChecked;
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
StringBuffer str = new StringBuffer("您选中了:");
for(int i=0;i<3;i++){
if(selected[i]){
str.append(items[i]+",");
}
}
str.deleteCharAt(str.length()-1);
Toast.makeText(DialogActivity.this, str, Toast.LENGTH_SHORT).show();
}
}).setNegativeButton("取消", null).show();
}
});
/**
* 自定义对话框内容
*/
diybtn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
LayoutInflater layoutInflater = LayoutInflater.from(DialogActivity.this); // 创建视图容器并设置上下文
final View view = layoutInflater.inflate(R.layout.dialog,null); // 获取list_item布局文件的视图
new AlertDialog.Builder(DialogActivity.this).setTitle("自定义布局").setView(view).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
EditText editText = (EditText) view.findViewById(R.id.likeText);
Toast.makeText(DialogActivity.this, "您的爱好是:"+editText.getText(), Toast.LENGTH_SHORT).show();
}
}).setNegativeButton("取消", null).show();
}
});
}
/**
* 按返回键退出弹出对话框
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
new AlertDialog.Builder(DialogActivity.this)
.setIcon(android.R.drawable.btn_dialog)
.setTitle("提示")
.setMessage("确定退出么?")
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
dialog.dismiss();
DialogActivity.this.finish();
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
}).show();// show很关键
}
return super.onKeyDown(keyCode, event);
}
}
再贴上上面代码中所用到的自定义dialog中xml的代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="爱好:"/>
<EditText
android:id="@+id/likeText"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</EditText>
</LinearLayout>
各种功能就能够实现了
创建自定义的Dialog有三种方式:
第一种:最常规的方法
new AlertDialog.Builder(DialogActivity.this).setTitle("自定义布局").setView(view).setPositiveButton("确定", new DialogInterface.OnClickListener() {}}
第二种:常规创建自定义Dialog 可以对内容进行自定义
AlertDialog.Builder builder=new Builder(ListDialog.this);
builder.setTitle("设为铃声");
View view=LayoutInflater.from(ListDialog.this).inflate(R.layout.list_setvoice, null);
ListView listView = (ListView) view.findViewById(R.id.list_setvoice);
String Ring[] = {"设为手机铃声","设为短信铃声","设为全部铃声"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(ListDialog.this,R.layout.list_setvoice_text,R.id.list_setvoice_text,Ring);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
ringCheck = position;
Log.e(TAG, ringCheck+"");
String path = music.getMusic_DATA();
File sdfile = new File(path);
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, sdfile.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, sdfile.getName());
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
Log.e(TAG, ringCheck+"");
if(ringCheck!=-1){
if(ringCheck == 0){
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
ringCheck = -1 ;
} if(ringCheck == 1){
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
ringCheck = -1;
}else if(ringCheck == 2){
values.put(MediaStore.Audio.Media.IS_PODCAST, true);
ringCheck = -1;
}
Uri uri = MediaStore.Audio.Media.getContentUriForPath(sdfile.getAbsolutePath());
Uri newUri = ListDialog.this.getContentResolver().insert(uri, values);
RingtoneManager.setActualDefaultRingtoneUri(ListDialog.this, RingtoneManager.TYPE_RINGTONE, newUri);
Toast.makeText(ListDialog.this,"设置成功", 0 ).show();
}
}
});
builder.setView(view);
AlertDialog dialog=builder.create();
dialog.show();
第三种:自定义dialogStyle 且自定义dialog面板 用上自己的xml文件
deleteDialog = new Dialog(ListDialog.this,R.style.DialogStyle);
View view=LayoutInflater.from(ListDialog.this).inflate(R.layout.list_remove, null);
deleteDialog.setContentView(view);<pre name="code" class="html"><span></span><pre name="code" class="html"> TextView textView = (TextView) view.findViewById(R.id.list_remove_check);<pre name="code" class="html">textView.setText("你好吗?");
deleteDialog.show();
其中 DialogStyle 可以这样设置:
<style name="DialogStyle" parent="@android:Theme.Dialog">
<item name="android:windowNoTitle">true</item> 无标题
<item name="android:windowIsFloating">true</item> 漂浮在Activity之上
</style>