遇见的问题
自定义一个Dialog后,在很多页面中,使用Dialog多了,重复的代码让人脑阔疼。
或者是难免好几个Dialog来回嵌套,那么多代码脑阔更疼,
想着用一行代码,就实现原来的效果。
这样写屎山,也写的是仙女屎,不是猪屎,毕竟仙女不拉一堆@Override
实现后效果
//展示对话框,有一个确认,一个取消
showTwo("是否要杀猪","杀掉","不杀",()->{doMyJob(); });
//自己的业务逻辑方法
private void doMyJob(){}
//两个都响应的话,可以这么用
showTwo("用什么杀猪?","用刀","用电",()->{ doMyJob(); },()->{ doMyJob();});
//此外,还可根据此想法去封装,带输入框的对话框,等等........
如何实现
在BaseActivity里这么写,继承的activity直接用就行
public void showTwo(String title, String r, String l, Runnable runnable, Runnable runnable2) {
DialogTipTwo dialogTipTwo = new DialogTipTwo(BaseActivity.this, title, r, l);
dialogTipTwo.setListener(new DialogTipTwo.OnChoose() {
@Override
public void onOk() {
runnable.run();
}
@Override
public void onCancle() {
runnable2.run();
}
});
dialogTipTwo.show();
}
public void showTwo(String title, String r, String l, Runnable runnable) {
DialogTipTwo dialogTipTwo = new DialogTipTwo(BaseActivity.this, title, r, l);
dialogTipTwo.setListener(new DialogTipTwo.OnChoose() {
@Override
public void onOk() {
runnable.run();
}
@Override
public void onCancle() {
}
});
dialogTipTwo.show();
}
对话框的代码:DialogTipTwo.java
public class DialogTipTwo extends Dialog {
private TextView main,ok,cancle;
private OnChoose onChoose;
/**
下方用到的R.style.CustomDialog1
<style name="CustomDialog1" 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">#ff333333</item><!--背景透明-->
<item name="android:background">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item><!--模糊-->
<item name="android:backgroundDimAmount">0.5</item>
</style>
**/
public DialogTipTwo(final Context context,String t,String r,String l) {
super(context, R.style.CustomDialog1);
setContentView(R.layout.base_dialog_tip_two);
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
WindowManager.LayoutParams attributes = getWindow().getAttributes();
attributes.alpha=1f;
getWindow().setAttributes(attributes);
setCancelable(false);
main=(TextView)findViewById(R.id.main);
ok=(TextView)findViewById(R.id.ok);
cancle=(TextView)findViewById(R.id.cancle);
main.setText(t);
ok.setText(r);
cancle.setText(l);
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
if(onChoose!=null){
onChoose.onOk();
}
}
});
cancle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
if(onChoose!=null){
onChoose.onCancle();
}
}
});
}
public void setT(String s){
main.setText(s);
}
public interface OnChoose {
void onOk();
void onCancle();
}
public void setListener(OnChoose listener) {
this.onChoose = listener;
}
}
对话框的布局:base_dialog_tip_two.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:background="#00000000"
android:layout_height="match_parent">
<com.andromeda.chatmana.myView.colorV.MyColorLinear
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
app:radiusV="25"
app:colorV="#ffffff"
android:layout_height="180dp">
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2.5"
android:padding="12dp"
android:text=""
android:gravity="center"
android:id="@+id/main"
android:textColor="#313131"
android:textSize="14dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="14dp"
android:textColor="#313131"
android:id="@+id/cancle"
android:text="取消"
android:layout_weight="1"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="14dp"
android:textColor="#313131"
android:id="@+id/ok"
android:text="确定"
android:layout_weight="1"/>
</LinearLayout>
</com.andromeda.chatmana.myView.colorV.MyColorLinear>
</RelativeLayout>
MyColorLinear,是自己用的一个view,便于再xml中直接设定圆角,背景色,边框粗细/颜色
可继承LinearLayout,RelativeLayout,textview,view等
可看博客内另一篇文章
人啊,总得改一次不得不改的屎山,才会明白封装继承多态的习惯,有多重要