GIF1.gif
版權聲明:本文為 zhangxiao原創文章,可以隨意轉載,但必須在明確位置注明出處!!!
轉載請標明出處:http://www.lxweimin.com/p/2cbf5bf3842e
概述
為了應對產品的變化多端的需求,于是封裝了一個自定義dialog,話不多說上Demo先:
https://github.com/zh-xiao/CustomDialog
需求分析
自定義dialog至少應該提供的接口
- 設置自定義布局(這里我放在構造方法里)
- 設置標題(這里我用一個set方法)
- 設置內容(這里我用一個set方法)
- 設置確定和取消的點擊事件(先通過定義接口的方式,定義一個確定事件的監聽器和一個取消事件的監聽器,再通過構造方法傳入自定義類)
CustomDialog:
public class CustomDialog extends Dialog {
private TextView mTitle;
private TextView mContent;
private Button mCancel;
private Button mConfirm;
private int mLayoutId;
private OnConfirmListener mConfirmListener;
private OnCancleListener mCancelListener;
private String mTitleString;
private String mContentString;
/**
* 構造方法
* @param context
* @param layoutId 布局文件id
* @param confirmListener 點擊確定對應的監聽器
* @param cancelListener 點擊取消對應的監聽器
*/
public CustomDialog(Context context,int layoutId,OnConfirmListener confirmListener,OnCancleListener cancelListener) {
super(context, R.style.MyDialog);
mConfirmListener=confirmListener;
mCancelListener=cancelListener;
mLayoutId=layoutId;
}
//點擊確定對應的監聽器
public interface OnConfirmListener {
void onConfirm();
}
//點擊取消對應的監聽器
public interface OnCancleListener {
void onCancle();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(mLayoutId);
mTitle= (TextView) findViewById(R.id.title);
mContent= (TextView) findViewById(R.id.content);
mCancel = (Button) findViewById(R.id.cancle);
mConfirm= (Button) findViewById(R.id.confirm);
mTitle.setText(mTitleString);
mContent.setText(mContentString);
mCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCancelListener.onCancle();
}
});
mConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mConfirmListener.onConfirm();
}
});
}
/**
* 設置對話框標題
* @param title
* @return
*/
public CustomDialog setTitle(String title){
mTitleString=title;
return this;
}
/**
* 設置對話框內容
* @param content
* @return
*/
public CustomDialog setContent(String content){
mContentString=content;
return this;
}
}
dialog_custom:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/dialog_bg"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="title"
android:textSize="20sp"
android:textStyle="bold"/>
<TextView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="content"
android:textSize="20sp"/>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="#000000"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp">
<Button
android:id="@+id/cancle"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="@drawable/selector_left_button"
android:gravity="center"
android:text="cancle"
android:textColor="#3980D1"/>
<View
android:layout_width="1px"
android:layout_height="match_parent"
android:background="#000000"/>
<Button
android:id="@+id/confirm"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="@drawable/selector_right_button"
android:gravity="center"
android:text="confirm"
android:textColor="#3980D1"/>
</LinearLayout>
</LinearLayout>
MainActivity:
public class MainActivity extends AppCompatActivity {
private Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button) findViewById(R.id.btn);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new CustomDialog(MainActivity.this, R.layout.dialog_custom, new CustomDialog.OnConfirmListener() {
@Override
public void onConfirm() {
Toast.makeText(MainActivity.this, "confirm", Toast.LENGTH_SHORT).show();
}
}, new CustomDialog.OnCancleListener() {
@Override
public void onCancle() {
Toast.makeText(MainActivity.this, "cancel", Toast.LENGTH_SHORT).show();
}
})
.setTitle("this is Title")
.setContent("this is Content! this is Content!")
.show();
}
});
}
}
activity_main:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.xiao.customdialog.MainActivity">
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"/>
</RelativeLayout>
總結:
可以看到CustomDialog使用起來非常簡潔,直接new出來,傳入context,layoutId,OnConfirmListener,OncancleListener,接著流式set/set/show.是不是超簡單.O(∩_∩)O.