react-native-navigation的迁移库

SideMenuController.java 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package com.reactnativenavigation.viewcontrollers;
  2. import android.app.Activity;
  3. import android.support.annotation.NonNull;
  4. import android.support.v4.widget.DrawerLayout;
  5. import android.support.v4.widget.DrawerLayout.LayoutParams;
  6. import android.view.Gravity;
  7. import android.view.View;
  8. import com.reactnativenavigation.parse.Options;
  9. import com.reactnativenavigation.presentation.OptionsPresenter;
  10. import com.reactnativenavigation.presentation.SideMenuOptionsPresenter;
  11. import com.reactnativenavigation.views.Component;
  12. import java.util.ArrayList;
  13. import java.util.Collection;
  14. import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
  15. public class SideMenuController extends ParentController<DrawerLayout> {
  16. private ViewController centerController;
  17. private ViewController leftController;
  18. private ViewController rightController;
  19. public SideMenuController(Activity activity, ChildControllersRegistry childRegistry, String id, Options initialOptions, OptionsPresenter presenter) {
  20. super(activity, childRegistry, id, presenter, initialOptions);
  21. }
  22. @Override
  23. protected ViewController getCurrentChild() {
  24. if (getView().isDrawerOpen(Gravity.LEFT)) {
  25. return leftController;
  26. } else if (getView().isDrawerOpen(Gravity.RIGHT)) {
  27. return rightController;
  28. }
  29. return centerController;
  30. }
  31. @NonNull
  32. @Override
  33. protected DrawerLayout createView() {
  34. return new DrawerLayout(getActivity());
  35. }
  36. @Override
  37. public void sendOnNavigationButtonPressed(String buttonId) {
  38. centerController.sendOnNavigationButtonPressed(buttonId);
  39. }
  40. @NonNull
  41. @Override
  42. public Collection<ViewController> getChildControllers() {
  43. ArrayList<ViewController> children = new ArrayList<>();
  44. if (centerController != null) children.add(centerController);
  45. if (leftController != null) children.add(leftController);
  46. if (rightController != null) children.add(rightController);
  47. return children;
  48. }
  49. @Override
  50. public void applyChildOptions(Options options, Component child) {
  51. super.applyChildOptions(options, child);
  52. applyOnParentController(parentController ->
  53. ((ParentController) parentController).applyChildOptions(this.options, child)
  54. );
  55. }
  56. @Override
  57. public void mergeChildOptions(Options options, Component child) {
  58. super.mergeChildOptions(options, child);
  59. new SideMenuOptionsPresenter(getView()).present(options.sideMenuRootOptions);
  60. applyOnParentController(parentController ->
  61. ((ParentController) parentController).mergeChildOptions(options.copy().clearSideMenuOptions(), child)
  62. );
  63. }
  64. @Override
  65. public void mergeOptions(Options options) {
  66. super.mergeOptions(options);
  67. new SideMenuOptionsPresenter(getView()).present(this.options.sideMenuRootOptions);
  68. }
  69. public void setCenterController(ViewController centerController) {
  70. this.centerController = centerController;
  71. View childView = centerController.getView();
  72. getView().addView(childView);
  73. }
  74. public void setLeftController(ViewController controller) {
  75. this.leftController = controller;
  76. getView().addView(controller.getView(), new LayoutParams(MATCH_PARENT, MATCH_PARENT, Gravity.LEFT));
  77. }
  78. public void setRightController(ViewController controller) {
  79. this.rightController = controller;
  80. getView().addView(controller.getView(), new LayoutParams(MATCH_PARENT, MATCH_PARENT, Gravity.RIGHT));
  81. }
  82. }