react-native-navigation的迁移库

RnnModal.java 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package com.reactnativenavigation.modal;
  2. import android.annotation.SuppressLint;
  3. import android.app.Dialog;
  4. import android.content.Context;
  5. import android.content.DialogInterface;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.Window;
  9. import android.view.WindowManager;
  10. import android.view.animation.Animation;
  11. import android.view.animation.AnimationUtils;
  12. import com.reactnativenavigation.R;
  13. import com.reactnativenavigation.activities.BaseReactActivity;
  14. import com.reactnativenavigation.controllers.ModalController;
  15. import com.reactnativenavigation.core.objects.Screen;
  16. import com.reactnativenavigation.utils.SdkSupports;
  17. import com.reactnativenavigation.utils.StyleHelper;
  18. import com.reactnativenavigation.views.RctView;
  19. import com.reactnativenavigation.views.RnnToolBar;
  20. import com.reactnativenavigation.views.ScreenStack;
  21. /**
  22. * Created by guyc on 02/05/16.
  23. */
  24. public class RnnModal extends Dialog implements DialogInterface.OnDismissListener {
  25. private ScreenStack mScreenStack;
  26. private View mContentView;
  27. private Screen mScreen;
  28. private RnnToolBar mToolBar;
  29. public RnnModal(BaseReactActivity context, Screen screen) {
  30. super(context, R.style.Modal);
  31. mScreen = screen;
  32. ModalController.getInstance().add(this);
  33. init(context);
  34. }
  35. @SuppressLint("InflateParams")
  36. private void init(final Context context) {
  37. requestWindowFeature(Window.FEATURE_NO_TITLE);
  38. mContentView = LayoutInflater.from(context).inflate(R.layout.modal_layout, null, false);
  39. mToolBar = (RnnToolBar) mContentView.findViewById(R.id.toolbar);
  40. mScreenStack = (ScreenStack) mContentView.findViewById(R.id.screenStack);
  41. setContentView(mContentView);
  42. mToolBar.updateToolbar(mScreen);
  43. mScreenStack.push(mScreen, new RctView.OnDisplayedListener() {
  44. @Override
  45. public void onDisplayed() {
  46. Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_up);
  47. mContentView.setAnimation(animation);
  48. mContentView.animate();
  49. }
  50. });
  51. // Set navigation colors
  52. if (SdkSupports.lollipop()) {
  53. Window window = getWindow();
  54. window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
  55. StyleHelper.setWindowStyle(window, context.getApplicationContext(), mScreen);
  56. }
  57. }
  58. public void push(Screen screen) {
  59. mScreenStack.push(screen);
  60. mToolBar.updateToolbar(mScreen);
  61. }
  62. public Screen pop() {
  63. if (mScreenStack.getStackSize() > 1) {
  64. return mScreenStack.pop();
  65. } else {
  66. ModalController.getInstance().remove();
  67. super.onBackPressed();
  68. return null;
  69. }
  70. }
  71. @Override
  72. public void onBackPressed() {
  73. if (mScreenStack.getStackSize() > 1) {
  74. mScreenStack.pop();
  75. } else {
  76. ModalController.getInstance().remove();
  77. super.onBackPressed();
  78. }
  79. }
  80. @Override
  81. public void onDismiss(DialogInterface dialog) {
  82. ModalController.getInstance().remove();
  83. }
  84. }