该篇文章从eoeAndroid搬迁过来的,原文地址:[Android分享] DialogFragment初次了解学习
DialogFragment在android 3.0时被引入。是一种特殊的Fragment,用于在Activity的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。
在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。兼容低版本sdk需要引用support-v4包的DialogFragment 创建一个dialogfragment的方法跟创建fragment的方法一样,新建一个类TestDialog,继承DialogFragment,重写onCreateView方法,在onCreateView方法里面加载布局,初始化控件,设置控件监听方法,处理业务逻辑等。
package com.example.testdialog;
import android.app.DialogFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Toast;
public class TestDialog extends DialogFragment implements OnClickListener {
private EditText et_content;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.dialog_test, null);
et_content = (EditText) view.findViewById(R.id.dialog_edit);
view.findViewById(R.id.dialog_cancel).setOnClickListener(this);
view.findViewById(R.id.dialog_certain).setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.dialog_cancel:
dismiss();
break;
case R.id.dialog_certain:
Toast.makeText(getActivity(), "内容:" + et_content.getText().toString(), Toast.LENGTH_SHORT).show();
dismiss();
break;
default:
break;
}
}
}
布局文件dialog_test.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/dialog_edit"
android:layout_width="match_parent"
android:layout_height="120dp"
android:hint="请填写内容" />
<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:text="取消" />
<Button
android:id="@+id/dialog_certain"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="确定" />
</LinearLayout>
</LinearLayout>
去除标题
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
背景透明设置
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
DialogFragment可以设置弹出位置,窗体大小,以及弹出或消失动画,需要在onstart方法里面添加相应的代码
修改弹出位置以及窗体大小
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
WindowManager.LayoutParams layoutParams = getDialog().getWindow().getAttributes();
DisplayMetrics displayMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
layoutParams.width = displayMetrics.widthPixels;
layoutParams.height = 800;
layoutParams.gravity = Gravity.BOTTOM;
getDialog().getWindow().setAttributes(layoutParams);
}
添加动画效果
layoutParams.windowAnimations = R.style.style_dialog_test_anim;
动画样式
<style name="style_dialog_test_anim">
<item name="android:windowEnterAnimation">@anim/anim_dialog_show</item>
<item name="android:windowExitAnimation">@anim/anim_dialog_dimiss</item>
</style>
弹出动画anim_dialog_show.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="0%"
android:fromYDelta="100%"
android:toXDelta="0%"
android:toYDelta="0%" >
</translate>
消失动画anim_dialog_dimiss.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="100%" >
</translate>
下载地址:项目代码