DialogFragment 使用与友好交互

来源:互联网 发布:windows webpack 安装 编辑:程序博客网 时间:2024/05/21 22:50

Dialog顾名思义对话框,在android app是最常用的UI组成部分,以往开发基本按照设计自定义一个Dialog。某天无意间发现竟有DialogFragment这个东西,3.0后同Fragment一起更新,罪过罪过,好久没翻文档,这种好东西不知道~而且官方鼓励开发者使用DialogFragment制作Dialog。

翠花代码~~

public class TwoBtnDialogFragment extends DialogFragment {    private OnDiagBtnClikListener mListener;    public TwoBtnDialogFragment() {        // Required empty public constructor    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        // Inflate the layout for this fragment        View view = inflater.inflate(R.layout.fragment_two_btn_dialog, container, false);        view.findViewById(R.id.confim_txt).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mListener.onConfimClick();                getDialog().dismiss();            }        });        view.findViewById(R.id.cacncel_txt).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mListener.onCancelClick();                getDialog().dismiss();            }        });        return view;    }    @Override    public void onAttach(Activity activity) {        super.onAttach(activity);        try {            mListener = (OnDiagBtnClikListener) activity;        } catch (ClassCastException e) {            throw new ClassCastException(activity.toString()                    + " must implement OnFragmentInteractionListener");        }    }    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setStyle(DialogFragment.STYLE_NO_TITLE,0);    }    @Override    public void onResume() {        super.onResume();        int width = getActivity().getWindowManager().getDefaultDisplay().getWidth() / 5 * 4;        int height = getActivity().getWindowManager().getDefaultDisplay().getHeight() / 3;        getDialog().getWindow().setLayout(width, height);    }    @Override    public void onDetach() {        super.onDetach();        mListener = null;    }    public interface OnDiagBtnClikListener {        // TODO: Update argument type and name        public void onConfimClick();        public void onCancelClick();    }}
没啥难度,就在onCreateView 返回一个你想要的布局样式。

用时发现问题:在布局里写宽高要不没用,要不不是定义的大小,最后在onResume里设置了宽高

 getDialog().getWindow().setLayout(width, height);

默认的DialogFragment顶部会有一个title占用的高度,实际使用不大美观可以在onCreate里

setStyle(DialogFragment.STYLE_NO_TITLE,0);

 getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE); 

去掉讨厌的title

下面可以为dialogFragment 加上进出动画,动画比较简单,就是中心点的缩放,抛砖引玉啊~

dialog_in.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <scale        android:interpolator="@android:anim/linear_interpolator"        android:fromXScale="0.0"        android:toXScale="1.0"        android:fromYScale="0.0"        android:toYScale="1.0"        android:startOffset="200"        android:duration="200"        android:pivotX = "50%"        android:pivotY = "50%"        />   <!--<translate        android:fromYDelta="50%"        android:toYDelta="0"        android:startOffset="200"        android:duration="200"        />--></set>

dialog.out

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <scale        android:interpolator="@android:anim/linear_interpolator"        android:fromXScale="1.0"        android:toXScale="0.0"        android:fromYScale="1.0"        android:toYScale="0.0"        android:duration="200"        android:pivotX = "50%"        android:pivotY = "50%"        />    <!--<translate        android:fromYDelta="0"        android:toYDelta="50%"        android:duration="200"        />--></set>

styles.xml里加入

<style name="dilaog_anim" parent="@android:style/Animation.Activity">        <item name="android:windowEnterAnimation">@anim/dialog_in</item>        <item name="android:windowExitAnimation">@anim/dialog_out</item>    </style>


万事俱备只欠五毛钱了~

fragment里:

 @Override    public void onActivityCreated(Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        Window window = getDialog().getWindow();        window.setWindowAnimations(R.style.dilaog_anim);    }


哦了!看看最终的效果


0 0
原创粉丝点击