使用环境:
需要dialog的时候
使用方法:
1 样式:
<color name="transparent">#00000000</color>
<style name="TaoDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item><!--边框--> <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上--> <item name="android:windowIsTranslucent">false</item><!--半透明--> <item name="android:windowNoTitle">true</item><!--无标题--> <item name="android:windowBackground">@color/transparent</item><!--背景透明--> <item name="android:backgroundDimEnabled">true</item><!--模糊--> </style>
public class BaseDialog extends Dialog implements Observable { private transient PropertyChangeRegistry mCallbacks; @Override public void addOnPropertyChangedCallback(OnPropertyChangedCallback callback) { synchronized (this) { if (mCallbacks == null) { mCallbacks = new PropertyChangeRegistry(); } } mCallbacks.add(callback); } @Override public void removeOnPropertyChangedCallback(OnPropertyChangedCallback callback) { synchronized (this) { if (mCallbacks == null) { return; } } mCallbacks.remove(callback); } public void notifyPropertyChanged(int fieldId) { synchronized (this) { if (mCallbacks == null) { return; } } mCallbacks.notifyCallbacks(this, fieldId, null); } private BaseActivity activity; private float alpha = 1; private Object tag; public void setTag(Object tag) { this.tag = tag; } public Object getTag() { return tag; } public void setShowingAlpha(float alpha) { this.alpha = alpha; } public BaseDialog(Context context) { // super(context, R.style.Translucent_Dialog); super(context, R.style.TaoDialog); if (context instanceof BaseActivity) this.activity = (BaseActivity) context; requestWindowFeature(Window.FEATURE_NO_TITLE); setCancelable(true); WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT; layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; getWindow().setAttributes(layoutParams); } public Context getActivity() { if (activity != null) return activity; else return super.getContext(); } @Override public void show() { handler.removeMessages(0); handler.sendEmptyMessage(1); } public void showDelayed(long time) { if (time == -1) handler.sendEmptyMessageDelayed(0, 10 * 1000); else handler.sendEmptyMessageDelayed(0, time); this.show(); } @Override public void dismiss() { handler.removeMessages(0); handler.sendEmptyMessage(2); } private Handler handler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0: if (!isShowing()) return; dismiss(); break; case 1: if (isShowing()) return; BaseDialog.super.show(); if (activity != null) { if (activity.isFinishing()) return; if (alpha != 1) { WindowManager.LayoutParams params = activity.getWindow().getAttributes(); params.alpha = alpha; activity.getWindow().setAttributes(params); } } break; case 2: if (!isShowing()) return; BaseDialog.super.dismiss(); if (activity == null || activity.isFinishing()) return; if (alpha != 1) { WindowManager.LayoutParams params = activity.getWindow().getAttributes(); params.alpha = 1f; activity.getWindow().setAttributes(params); } break; } } }; }
2 一个简单的布局:
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="delete" type="com.yarui.app.client.ui.view.dialog.DeleteDialog"/> </data> <LinearLayout android:orientation="vertical" android:background="@drawable/mainbackground" android:layout_width="@dimen/threehundred" android:layout_height="@dimen/oneHundredninety"> <TextView android:layout_width="match_parent" android:layout_height="@dimen/sixty" android:gravity="center" android:text="@string/lookimage" android:textSize="@dimen/textSizeA" android:textColor="@color/text_block" android:onClick="@{delete.lookPoint}" /> <include layout="@layout/one"/> <TextView android:layout_width="match_parent" android:layout_height="@dimen/sixty" android:gravity="center" android:text="@string/deletePhoto" android:textSize="@dimen/textSizeA" android:textColor="@color/text_block" android:onClick="@{delete.deletePoint}" /> <include layout="@layout/henglineten"/> <TextView android:onClick="@{delete.cancelPoint}" android:layout_width="match_parent" android:layout_height="@dimen/sixty" android:gravity="center" android:text="@string/cancel" android:textSize="@dimen/textSizeA" android:textColor="@color/text_block" /> </LinearLayout> </layout>
draw able:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/FFFFFF"/> <corners android:radius="@dimen/twenty"/> <stroke android:color="@color/FFFFFF" android:width="@dimen/one"/> </shape>
public class DeleteDialog extends BaseDialog { private Context mcontext; private DialogDeletephotoBinding deletephotoBinding; private onCheckItemClick onCheckItemClick; public DeleteDialog(Context context) { super(context); this.mcontext = context; deletephotoBinding = DataBindingUtil.inflate(LayoutInflater.from(mcontext), R.layout.dialog_deletephoto,null,false); deletephotoBinding.setDelete(this); setContentView(deletephotoBinding.getRoot()); } public void setOnCheckItemClick(onCheckItemClick onCheckItemClick) { this.onCheckItemClick = onCheckItemClick; } public void lookPoint(View view) { if (onCheckItemClick != null) { onCheckItemClick.onConfirmClick(); } dismiss(); } public void deletePoint(View view) { if (onCheckItemClick != null) { onCheckItemClick.onCancelClick(); } dismiss(); } public void cancelPoint(View view){ if (onCheckItemClick != null) { onCheckItemClick.onCloseClick(); } dismiss(); } }
在activity中使用
DeleteDialog deleteDialog = new DeleteDialog(LoginActivity.this); deleteDialog.show();
本文中使用了初级的databinding,
自定义的接口:
public interface onCheckItemClick { void onCancelClick(); void onConfirmClick(); void onCloseClick(); }
思路不清晰……作为笔记使用。
重点 1 显示模糊背景的style
2 dialog的base代码
3 dialog的用法