2015-02-11 14 views
8

我正在嘗試爲DialogFragment設置進入和退出轉換,這似乎足夠直接。下面是從我的DrinkDetailActivity創建對話框代碼:設置Android片段進入和退出轉換?

fab.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      //create and display the dialog 
      DialogFragment orderFragment = new OrderDrinkDialogFragment(); 

      //set the slide transition for the fragment 
      Transition dialSlide = new Slide(); 
      dialSlide.setDuration(300); 

      orderFragment.setEnterTransition(dialSlide); 
      orderFragment.setExitTransition(dialSlide); 
      orderFragment.show(getFragmentManager(), "order"); 
     } 
    }); 

這裏是從我的OrderDrinkDialogFragment類代碼:

public class OrderDrinkDialogFragment extends DialogFragment 
{ 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) 
    { 
     AlertDialog.Builder builder = new AlertDialog.Builder(DrinkDetailActivity.activity); 

     //set up the Linear Layout of the dialog 
     LinearLayout layout = new LinearLayout(DrinkDetailActivity.activity); 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
                    LinearLayout.LayoutParams.WRAP_CONTENT); 
     layout.setOrientation(LinearLayout.VERTICAL); 
     layout.setLayoutParams(params); 

     //set up the EditText view 
     EditText nameField = new EditText(DrinkDetailActivity.activity); 
     nameField.setHint(R.string.dialog_name_hint); 

     //add the EditText view to the layout 
     layout.addView(nameField, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
                  LinearLayout.LayoutParams.WRAP_CONTENT)); 

     //set layout as the view of the dialog 
     builder.setView(layout); 

     return builder.create(); 
    } 
} 

DrinkDetailActivity.activity簡直是thisDrinkDetailActivity的實例中。出於某種原因,對話不會在我或它被解散時轉換,它只是彈出和放開。 This教程幫助我瞭解了我的應用程序的其餘部分的Activity轉換,並且我按照它的說法遵循了片段轉換的相同說明。我究竟做錯了什麼?

回答

9

這個工作對me.My滑動畫是

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > 

    <translate 
     android:duration="@android:integer/config_mediumAnimTime" 
     android:fromYDelta="100%" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:toXDelta="0" /> 

</set> 

和我的幻燈片動畫是

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

    <translate 
     android:duration="@android:integer/config_mediumAnimTime" 
     android:fromYDelta="0%p" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:toYDelta="100%p" /> 

</set> 

在你的風格你onCreateDialog()添加此

<style name="DialogAnimation"> 
    <item name="android:windowEnterAnimation">@anim/slide_up</item> 
    <item name="android:windowExitAnimation">@anim/slide_down</item> 
</style> 

現在終於對話框片段添加此

public Dialog onCreateDialog(Bundle savedInstanceState) 
{ 
    final Dialog dialog = super.onCreateDialog(savedInstanceState); 
    dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; 
    return dialog; 
} 
+0

如果我這樣做,我得到這個錯誤:'java.lang.NullPointerException:嘗試調用虛擬方法'android.view.Window android。在一個空對象引用上的app.Dialog.getWindow(),它使se因爲在創建對話框之前我將如何獲得對話框的窗口? – mithunm93 2015-02-11 09:38:01

+1

查看已編輯的答案 – goonerDroid 2015-02-11 10:03:10

+0

This Works!有一些變化:1)在向上滑動動畫中,將「toXDelta」更改爲「toYDelta」,2)在向上滑動動畫中,將「100%」和「0」分別更改爲「100%p」和「0%p」 ,3)我只是做了一個'對話框對話框= builder.create();'而不是調用super。非常感謝你的幫助!不知道我是否應該在這裏提出這個問題,但是我該如何讓對話框從底部導航欄下滑出? – mithunm93 2015-02-11 10:45:43

-1

DialogFragment不僅僅是一個對話框,也是一個片段,請參閱Basic Dialog有關如何使用它的更多細節。你在片段中使用了onCreateDialog,這可能是你問題的原因。因此,使用onCreateView創建您的片段對話框視圖。

希望這個答案可以幫助你。

+3

錯誤答案,在這裏看到的警告對話框中的部分: http://developer.android.com/reference/android/app/DialogFragment.html – 2015-02-11 09:10:47

0

你需要寫一個樣式顯示像對話框

<style name="AnimDialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowAnimationStyle">@style/DialogAnimation</item> 
</style> 

<style name="DialogAnimation"> 
    <item name="android:windowEnterAnimation">@anim/fadein</item> 
    <item name="android:windowExitAnimation">@anim/fadeout</item> 
</style> 

任何窗口動畫的對話框中,您需要實例像

Dialog animatedDialog = new Dialog(MainActivity.this,R.style.AnimDialog);