很多時候出現在使用DialogFragment的時候,系統給定的樣式不能滿足我們的要求,因此我們就需要修改,其實修改其樣式非常的簡單,只需要填充佈局就可以了..
一,創建class繼承DialogFragment
public class AppDialog extends AppCompatDialogFragment
二,重新onCreateDialog方法,並填充自己需要的DialogFragment樣式的佈局文件
private Button bt_confirm;
private Button bt_cancel;
private ViewPager dg_viewpager;
private TextView dg_title;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.dialog_add_picture, null);
bt_confirm = (Button) view.findViewById(R.id.dialog_confirm);//確認按鈕
bt_cancel = (Button) view.findViewById(R.id.dialog_cancel);//取消按鈕
dg_viewpager = (ViewPager) view.findViewById(R.id.dialog_viewpager);//dialog內容
dg_title = (TextView) view.findViewById(R.id.dialog_title);//dialog標題
initListener();
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(view);
return builder.create();
}
佈局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minWidth="280dip"
android:orientation="vertical">
<TextView
android:id="@+id/dialog_title"
android:layout_width="match_parent"
android:layout_height="64dp"
android:gravity="center"
android:text="添加方式"
android:textColor="#464646"
android:textSize="32dp" />
<android.support.v4.view.ViewPager
android:id="@+id/dialog_viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#BCBCBC" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/dialog_cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#FFF"
android:gravity="center_horizontal"
android:text="取消"
android:textColor="#838383"
android:textSize="32dp" />
<View
android:layout_width="1dp"
android:layout_height="40dp"
android:background="#BCBCBC" />
<Button
android:id="@+id/dialog_confirm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#FFF"
android:gravity="center_horizontal"
android:text="確認"
android:textColor="#5896FE"
android:textSize="32dp" />
</LinearLayout>
</LinearLayout>
三,設置DialogFragment的取消/確認監聽事件,其中setCancelable(false);//設置點擊除dialog外(包括點擊返回鍵)不消失,setCanceledOnTouchOutside(false)設置點擊除dialog外(不包括點擊返回鍵)不消失
private void initListener() {
setCancelable(false);//設置點擊除dialog外(包括點擊返回鍵)不消失,setCanceledOnTouchOutside(false)設置點擊除dialog外(不包括點擊返回鍵)不消失
bt_confirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "確認", Toast.LENGTH_SHORT).show();
}
});
bt_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "取消", Toast.LENGTH_SHORT).show();
dismiss();
}
});
}
四,設置dialog邊框爲透明色
/**
* 內邊框設置背景爲透明色
*
* @param inflater
* @param container
* @param savedInstanceState
* @return
*/
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return super.onCreateView(inflater, container, savedInstanceState);
}
/* *
*外邊框設置透明色
*/
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
WindowManager.LayoutParams windowParams = window.getAttributes();
windowParams.dimAmount = 0.0f;
window.setAttributes(windowParams);
}
五,Activity顯示dialog顯示以及activity傳遞數據到dialogFragment,數據傳遞通過bundle傳遞.
/**
*activity傳遞數據給dialogFragment
*/
AppDialog appDialog = new AppDialog();
Bundle bundle = new Bundle();
bundle.putString("flag","string");
appDialog .setArguments(bundle); //設置dialog的bundle appDialog.show(getSupportFragmentManager(),"appIcon");//顯示fragmentdialog
/**
*dialogFragment接收數據
*/
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
String str= bundle.getString("flag");
System.out.print(str)
}
六,從dialogFragment傳遞數據到activity使用回調接口.
/**
*dialogFragment中書寫接口
*/
public interface DialogClickListener{
void onDialoClick();
}
public void setOnDialogClick(DialogClickListener listener){
this.listener=listener;
}
/**
*activity中實現接口方法
*/
dialog.setOnDialogClick(new AchiviementDialog.DialogClickListener() {
@Override
public void onDialoClick() {
System.out.print("我是點擊事件")
}
});