您的位置:首页 > 移动开发 > Android开发

DialogFragment 使用与友好交互

2015-07-30 23:18 405 查看
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);
}


哦了!看看最终的效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android DialogFragment