[Android分享] DialogFragment初次瞭解學習

該篇文章從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>

這裏寫圖片描述

下載地址:項目代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章