Android开发修改DialogFragment样式以及与activity之间的数据传递

很多时候出现在使用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("我是点击事件")
            }
        });
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值