Dialog在我们安卓开发过程中应用的非创广泛,但是系统自带的样式外观实在不敢恭维。所以Dialog往往都是需要我们根据客户的要求自定义的编写。这里我就简单的介绍下如何自定义的编写Dialog。
自定义Dialog并不难下面我们就先看代码
DialogSureCancel.java
package com.yitong.dialog;
import com.yitong.dialogdemo.R;
import com.yitong.view.MTextView;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
* @Description 确定取消对话框
*/
public class DialogSureCancel extends ProgressDialog {
private TextView sc_dialog_title_txt;// title
private MTextView sc_dialog_msg_txt;// 提示框内容
private LinearLayout sc_dialog_sure_ll, sc_dialog_cancel_ll;
private View.OnClickListener sureOnClick, cancelOnClick;// 点击监听
private String title, msg;
private TextView dialog_sure_tv, dialog_cancel_tv;
private String sure_txt, cancel_txt;
public DialogSureCancel(Context context) {
super(context);
}
public DialogSureCancel(Context ctx, int theme) {
super(ctx, theme);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_sure_cancel);
dialog_sure_tv = (TextView) findViewById(R.id.dialog_sure_tv);
dialog_cancel_tv = (TextView) findViewById(R.id.dialog_cancel_tv);
sc_dialog_title_txt = (TextView) findViewById(R.id.sc_dialog_title_txt);
sc_dialog_msg_txt = (MTextView) findViewById(R.id.sc_dialog_msg_txt);
sc_dialog_sure_ll = (LinearLayout) findViewById(R.id.sc_dialog_sure_ll);
sc_dialog_cancel_ll = (LinearLayout) findViewById(R.id.sc_dialog_cancel_ll);
sc_dialog_title_txt.setText(title);
sc_dialog_sure_ll.setOnClickListener(sureOnClick);
sc_dialog_cancel_ll.setOnClickListener(cancelOnClick);
sc_dialog_msg_txt.setMText(msg);
if (sure_txt != null) {
dialog_sure_tv.setText(sure_txt);
}
if (cancel_txt != null) {
dialog_cancel_tv.setText(cancel_txt);
}
}
/**
* @Description 控制显示 确定按钮 和 取消按钮 默认显示确定 和取消
* @param sure
* @param cancel
*/
public void changeSureCancel(String sure, String cancel) {
if (sure != null) {
this.sure_txt = sure;
}
if (cancel != null) {
this.cancel_txt = cancel;
}
}
/**
* @Description 注入监听事件
*/
public void setonClick(View.OnClickListener sureOnClick,
View.OnClickListener cancelOnClick) {
this.sureOnClick = sureOnClick;
this.cancelOnClick = cancelOnClick;
}
/**
* @Description 标题注册
* @param title
*/
public void setTextTitle(String title) {
this.title = title;
}
/**
* @Description msg注册
*/
public void setTextMsg(String msg) {
this.msg = msg;
}
// 安卓back键监听 点击Back不销毁Dialog
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 按下键盘上返回按钮
if (keyCode == KeyEvent.KEYCODE_BACK) {
// this.dismiss();
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
}
dialog_sure_cancelxml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:geekui="http://schemas.android.com/apk/res/com.yitong.mbank.pzh_ps"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_centerInParent="true"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="#00000000"
android:gravity="center" >
<LinearLayout
android:id="@+id/dialog_sure_cancel_ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/sc_dialog_sure_ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/dialog_left_select"
android:gravity="center" >
<TextView
android:id="@+id/dialog_sure_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:padding="10dp"
android:text="确定"
android:textColor="#007AFF"
android:textSize="17sp" >
</TextView>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/vertical_line_bg" >
</LinearLayout>
<LinearLayout
android:id="@+id/sc_dialog_cancel_ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/dialog_right_select"
android:gravity="center" >
<TextView
android:id="@+id/dialog_cancel_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:padding="10dp"
android:text="取消"
android:textColor="#007AFF"
android:textSize="17sp" >
</TextView>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/dialog_sure_cancel_ll"
android:background="@drawable/dialog_up_bg"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp" >
<TextView
android:id="@+id/sc_dialog_title_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:clickable="false"
android:gravity="center_horizontal"
android:text="温馨提示"
android:textColor="#000000"
android:textSize="17sp"
android:textStyle="bold" />
</LinearLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="10dp"
android:fadingEdge="none"
android:overScrollMode="never"
android:scrollbars="none" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" >
<com.yitong.view.MTextView
android:id="@+id/sc_dialog_msg_txt"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:textColor="#000000"
android:textSize="17sp" />
</LinearLayout>
</ScrollView>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
style.xml
<resources>
<style name="CustomProgressDialog" parent="@style/CustomDialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
</style>
<style name="CustomDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
</style>
</resources>
MainActivity.java
package com.yitong.dialogdemo;
import com.yitong.dialog.DialogSure;
import com.yitong.dialog.DialogSureCancel;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
private Button btn1, btn2;
private DialogSure dialog;
private Activity activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = this;
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn2:
break;
case R.id.btn1:
ShowPromptBoxTrue();
break;
}
}
/**
* @Description 打开提示框 清空通讯录
*/
private void ShowPromptBoxTrue() {
final DialogSureCancel dialog = new DialogSureCancel(activity,
R.style.CustomProgressDialog);
dialog.setCancelable(false);
dialog.setTextTitle("温馨提示");
dialog.setTextMsg("啦啦啦德玛西亚");
dialog.setonClick(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
Toast.makeText(activity, "是的德玛西亚", 0).show();
}
}, new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
}
大功告成 是不是很简单
Demo下载连接
http://download.csdn.net/detail/daniu52100/9482714