自定义Dialog:
public class MyDialog extends Dialog implements View.OnClickListener {
private Context context;
private int layoutResID;//布局文件id
private int[] listenedItem;//监听的控件id
String user,reason;
public FriendRequest(Context context,int layoutResID,int[] listenedItem){
super(context,R.style.MyDialog);//加载dialog的样式
this.context = context;
this.layoutResID = layoutResID;
this.listenedItem = listenedItem;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//提前设置Dialog的一些样式
Window dialogWindow = getWindow();
dialogWindow.setGravity(Gravity.CENTER);//设置dialog显示居中
//dialogWindow.setWindowAnimations();设置动画效果
setContentView(layoutResID);
WindowManager windowManager = ((Activity)context).getWindowManager();
Display display = windowManager.getDefaultDisplay();
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.width = display.getWidth()*2/3;// 设置dialog宽度为屏幕的2/3
getWindow().setAttributes(lp);
setCanceledOnTouchOutside(true);//点击外部Dialog消失
//遍历控件id添加点击注册
for(int id:listenedItem){
findViewById(id).setOnClickListener(this);
}
}
private OnCenterItemClickListener listener;
public interface OnCenterItemClickListener {
void OnCenterItemClick(FriendRequest dialog, View view);
}
public void setOnCenterItemClickListener(OnCenterItemClickListener listener) {
this.listener = listener;
}
@Override
public void onClick(View v) {
dismiss();
listener.OnCenterItemClick(this,v);
}
}
dialog样式:
<style name="MyDialog" parent="android:style/Theme.Dialog">
<!--背景颜色和透明程度-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--是否去除标题-->
<item name="android:windowNoTitle">true</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否模糊-->
<item name="android:backgroundDimEnabled">true</item>
</style>
使用的时候传入样式,和按钮的监听事件即可:
MyDialog myDialog ;
//实例化自定义的dialog 传入layout布局 需要设置监听的控件
myDialog = new MyDialog (this,R.layout.dialog,new int[]{R.id.bn_close});
//绑定点击事件
myDialog .setOnCenterItemClickListener(new FriendRequest.OnCenterItemClickListener() {
@Override
public void OnCenterItemClick(MyDialog dialog, View view) {
switch (view.getId()){
case R.id.bn_close:
//监听事件
...
break;
}
}
});
//显示
myDialog .show();