該篇文章從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>
下載地址:項目代碼