上午闲来无事,写了个自定义的dialog,使用的话还算通用,略做修改就可以加到项目中了,先上图吧,比较无图无真相
基本的搭建就是3个部分,最上面的提示栏,中间的提示消息,下面的确定,取消按钮,当然一般提示栏那里会有图标的,这个我没加图片,项目需要的话,可以自己设置图片(被我GONE了),先看看自定义的继承dialog代码:
MyDialog.java
package com.example.dialog.widget;
import com.example.dialog.R;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MyDialog extends Dialog {
Context context;
Button confirm, cancel;
/**
* 是否有标题
*/
private boolean hasTitle;
/**
* 提示内容
*/
private String content;
/**
* 提示标题
*/
private String title;
protected PositiveListener listener;
public MyDialog(Context context) {
super(context, R.style.alert);
this.context = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog);
confirm = (Button) findViewById(R.id.dialog_confirm);
cancel = (Button) findViewById(R.id.dialog_cancel);
confirm.setOnClickListener(GetPositiveButtonOnClickListener());
cancel.setOnClickListener(GetNegativeButtonOnClickListener());
LinearLayout dialog_top = (LinearLayout) findViewById(R.id.dialog_top);
View title_red_line = (View) findViewById(R.id.title_red_line);
if (hasTitle) {
dialog_top.setVisibility(View.VISIBLE);
title_red_line.setVisibility(View.VISIBLE);
} else {
dialog_top.setVisibility(View.GONE);
title_red_line.setVisibility(View.GONE);
}
TextView titleTextView = (TextView) findViewById(R.id.dialog_title);
titleTextView.setText(title);
TextView messageTextView = (TextView) findViewById(R.id.dialog_message);
messageTextView.setText(content);
}
protected View.OnClickListener GetNegativeButtonOnClickListener() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
};
}
/**
* 获取确认按钮单击事件监听
*
* @return 确认按钮单击事件监听
*/
protected View.OnClickListener GetPositiveButtonOnClickListener() {
return new View.OnClickListener() {
public void onClick(View v) {
// Toast.makeText(context, "你点击了确认按钮", 1).show();
// 这里写一个方法,当点击按钮之后就执行,但是这个方法在子类里执行,dialog调用这个方法
if (listener != null) {
listener.onConfrim();
}
dismiss();
}
};
}
public void setPositiveListener(PositiveListener listener) {
this.listener = listener;
}
public interface PositiveListener {
void onConfrim();
}
public void hasTitle(boolean hasTitle) {
this.hasTitle = hasTitle;
}
public void setContent(String content) {
this.content = content;
}
public void setTitle(String title) {
this.title = title;
}
}
这里要提示新手的一些说明,系统自带的dialog有很多默认的东西,比如边框,背景之类的,因为需要自定义的,样式当然想用自己的,所以在构造方法中添加了style,
<style name="alert">
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 设置背景为透明,不是系統默認的黑色 -->
<!-- <item name="android:windowTitleStyle">@style/DialogWindowTitle</item> -->
<!-- 标题样式 -->
<item name="android:windowIsFloating">true</item><!-- 是否悬浮在activity上 -->
<item name="android:windowContentOverlay">@null</item><!-- 窗口是否有遮盖 -->
<item name="android:windowFrame">@null</item><!-- 去掉边框 -->
<item name="android:windowNoTitle">true</item><!--去掉标题 -->
</style>
上面的代码就可以消除掉系统默认的边框,背景之类的了,代码比较简单,就不解释了,在看看MainActivity中的使用
package com.example.dialog;
import com.example.dialog.widget.MyDialog;
import com.example.dialog.widget.MyDialog.PositiveListener;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
show = (Button) findViewById(R.id.show);
final String text = getResources().getString(R.string.dialog_content);
final String title = getResources().getString(R.string.tips);// 直接加载布局文件资源是比较慢的,所以一般先获取到资源,再填充到视图中
show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MyDialog dialog = new MyDialog(MainActivity.this);
dialog.setPositiveListener(new PositiveListener() {
@Override
public void onConfrim() {
// 点击确认之后执行的事件
Log.i("PositiveListener", "你调用了接口方法");
}
});
dialog.hasTitle(true);
dialog.setContent(text);
dialog.setTitle(title);
dialog.show();
}
});
}
}
这里用一个按钮弹出dialog,一般点击dialog的确认按钮会执行一些事件,根据单例模式,事件不能写在dialog里,所以自己写一个接口,供确认按钮调用执行事件的方法,其他的诸如标题,内容之类的,都可以自己设置,代码对于一些异常如空指针的没做判断,如使用时有问题,可以自行加上,好了,记录下来供新手们copy,下面贴上代码地址
http://pan.baidu.com/s/174hMe