1.在style.xml下自定义
<!-- CustomDialog 自定义Dialog样式-->
<style name="CustomDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item> <!-- 设置边框 -->
<item name="android:windowIsFloating">true</item> <!-- 窗口是否悬浮 -->
<item name="android:windowIsTranslucent">true</item><!-- 窗口是否透明 -->
<item name="android:windowNoTitle">true</item><!-- 是否有标题栏 -->
<item name="android:background">@drawable/ic_launcher</item><!-- 设置背景图片 -->
<item name="android:windowBackground">@color/transparent</item><!-- 设置窗口背景颜色(透明的) -->
<item name="android:backgroundDimEnabled">true</item><!-- 是否使用背景 -->
</style>
2.准备好dialog布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#cccccc">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/title_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提示"
/>
<ImageView
android:id="@+id/line_img"
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#cccccc"/>
<TextView
android:id="@+id/message_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="此为信息提示"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/yes_btn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:layout_margin="5dp"/>
<Button
android:id="@+id/no_btn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:layout_margin="5dp"/>
</LinearLayout>
</LinearLayout>
3.自定义CustomDialog
package android.sum.study.dialog;
import java.util.zip.Inflater;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
/**
* User:XiaoYuguang
* date:2013-11-19上午11:26:10
* TODO 自定义Dialog
*/
public class CustomDialog extends Dialog {
// 声明该自定义Dialog静态全局对象
private static CustomDialog cDialog = null;
/**
* 构造函数
* @param context 上下文
* @param theme 样式
*/
public CustomDialog(Context context, int theme) {
super(context, theme);
}
/**
* 构造函数
*/
public CustomDialog(Context context){
super(context);
}
/**创建已经构造好样式的Dialog
* @param context 上下文
* @param theme 自定义Dialog样式:如参数(R.style.CustomDialog)
* @param layoutResID 自定义Dialog的资源布局(如:R.layout.customdialog)
* @return 返回构造好的Dialog静态对象
*/
public static CustomDialog createDialog(Context context,int theme,int layoutResID){
cDialog = new CustomDialog(context, theme);
cDialog.setContentView(layoutResID);
cDialog.getWindow().getAttributes().gravity = Gravity.CENTER; //设置dialog的布局为中心显示
return cDialog;
}
/**
* 判断Dialog改变焦点后的状态
*/
public void onWindowFocusChanged(boolean hasFocus){
if(cDialog == null){
return;
}
}
/** 设置Dialog标题
* @param title 标题
* @return 返回cDialog显示
*/
public CustomDialog setTitle(String title){
return cDialog;
}
/** 设置Dialog信息提示
* @param message 信息提示
* @param textviewID 信息内容textview的ID
* @return 返回cDialog显示
*/
public CustomDialog setMessage(int textviewID,String message){
TextView tv = (TextView)cDialog.findViewById(textviewID);
if(tv != null){
tv.setText(message);
}
return cDialog;
}
/** 设置背景图片
* @param layoutID layout资源
* @param drawableID 图片资源
* @return
*/
public CustomDialog setBackground(int layoutID,int drawableID){
View layout = (View)cDialog.findViewById(layoutID);
if(layout != null){
layout.setBackgroundResource(drawableID);
}
return cDialog;
}
/** 设置分割线图片
* @param line_img 图片id
* @param imgresID 图片资源地址
* @return
*/
public CustomDialog setLineImg(int line_img,int imgresID){
ImageView img = (ImageView)cDialog.findViewById(line_img);
if(img != null){
img.setImageResource(imgresID);
}
return cDialog;
}
public Button getBtn(int btnID){
Button btn = (Button)cDialog.findViewById(btnID);
return btn;
}
}
4.最后引用
package android.sum.study.dialog;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
Button sub_btn;
CustomDialog dialog;
TextView message_tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sub_btn = (Button)findViewById(R.id.sub_btn);
sub_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDialog();
}
});
}
private void showDialog(){
dialog = CustomDialog.createDialog(this, R.style.CustomDialog, R.layout.customdialog);
dialog.setTitle("提示");
dialog.setMessage(R.id.message_tv, "你要不要退出别墨迹");
dialog.setBackground(R.id.dialog_layout, R.drawable.project_background_icon);
dialog.getBtn(R.id.yes_btn).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(dialog.getContext(), "自己进行布局", 2000).show();
}
});
dialog.show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}