2016-05-21 1 views
0

Ich habe meine eigenen Animationen für das Dialogfeld Fenster eingeben, aber es wird nicht ausgelöst, wenn ich .show() zum ersten Mal nach der Aktivität erstellt.DialogFragment enter Animation nicht feuert bei der ersten Show

unter Sie Am gif kann die erste Mal Animation sehen ist Drop-Down und es nur zweites Mal Folie nach oben, die ich gesetzt.

enter image description here

DialogFragment:

public class DateChooseDialog extends DialogFragment { 

    public DateChooseDialog() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setStyle(STYLE_NORMAL, R.style.DialogFullScreen); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
          @Nullable Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.dialog_date_choose, container); 
    } 

    @Override 
    public void onResume() { 
     WindowManager.LayoutParams params = getDialog().getWindow().getAttributes(); 
     params.width = WindowManager.LayoutParams.MATCH_PARENT; 
     params.gravity = Gravity.BOTTOM; 
     params.windowAnimations = R.style.DialogSlideAnimation; 
     getDialog().getWindow().setAttributes(params); 
     super.onResume(); 
    } 
} 

Animationen:

<style name="DialogSlideAnimation" parent="Theme.AppCompat.Dialog"> 
    <item name="android:windowEnterAnimation">@anim/slide_up</item> 
    <item name="android:windowExitAnimation">@anim/slide_down</item> 
</style> 

<!-- slide_up --> 
<translate 
    android:duration="@android:integer/config_shortAnimTime" 
    android:fromYDelta="0" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:toYDelta="100%" 
    /> 

<!-- slide_down --> 
<translate 
    android:duration="@android:integer/config_shortAnimTime" 
    android:fromYDelta="0" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:toYDelta="100%" 
    /> 

Dies ist, wie ich zeigen Dialog:

DateChooseDialog dateChooseDialog = new DateChooseDialog(); 
dateChooseDialog.show(getFragmentManager(), "date_choose"); 

Antwort

1

Problem ist über die Tastatur. Es ändert die Größe Ihres gesamten Fensters und während die Tastatur mit der Slide-Down-Animation verschwindet, ändert sich Ihr gesamtes Fenster selbst, indem es nach unten rutscht.

Bitte fügen Sie diese Zeilen zu Ihrem Manifest hinzu.

<activity (Your current activity) 
    ... 
    android:windowSoftInputMode="adjustPan"> 
</activity> 

Mit diesen Zeilen überlagert die Tastatur das Fenster, und die Größe wird nicht geändert. Die nächste Herausforderung besteht darin, dass die Tastatur geöffnet wird, um die Animation bei Bedarf zu verzögern.

Viel Glück dort