2015-02-11 39 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);