react-native-navigation的迁移库

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package com.reactnativenavigation.views;
  2. import android.content.Context;
  3. import android.graphics.Color;
  4. import android.text.TextUtils;
  5. import com.aurelhubert.ahbottomnavigation.AHBottomNavigation;
  6. import com.aurelhubert.ahbottomnavigation.AHBottomNavigationItem;
  7. import com.reactnativenavigation.animation.VisibilityAnimator;
  8. import com.reactnativenavigation.params.AppStyle;
  9. import com.reactnativenavigation.params.ScreenParams;
  10. import com.reactnativenavigation.params.StyleParams;
  11. import com.reactnativenavigation.utils.ViewUtils;
  12. import com.reactnativenavigation.views.utils.Constants;
  13. import java.util.List;
  14. public class BottomTabs extends AHBottomNavigation {
  15. private VisibilityAnimator visibilityAnimator;
  16. public BottomTabs(Context context) {
  17. super(context);
  18. setForceTint(true);
  19. setId(ViewUtils.generateViewId());
  20. createVisibilityAnimator();
  21. setStyle();
  22. setFontFamily();
  23. }
  24. public void addTabs(List<ScreenParams> params, OnTabSelectedListener onTabSelectedListener) {
  25. for (ScreenParams screenParams : params) {
  26. AHBottomNavigationItem item = new AHBottomNavigationItem(screenParams.tabLabel, screenParams.tabIcon,
  27. Color.GRAY);
  28. addItem(item);
  29. setOnTabSelectedListener(onTabSelectedListener);
  30. }
  31. setTitlesDisplayState();
  32. }
  33. public void setStyleFromScreen(StyleParams params) {
  34. if (params.bottomTabsColor.hasColor()) {
  35. setBackgroundColor(params.bottomTabsColor);
  36. }
  37. if (params.bottomTabsButtonColor.hasColor()) {
  38. setInactiveColor(params.bottomTabsButtonColor.getColor());
  39. }
  40. if (params.selectedBottomTabsButtonColor.hasColor()) {
  41. setAccentColor(params.selectedBottomTabsButtonColor.getColor());
  42. }
  43. setVisibility(params.bottomTabsHidden, true);
  44. }
  45. public void setTabButton(ScreenParams params, Integer index) {
  46. if (params.tabIcon != null) {
  47. AHBottomNavigationItem item = this.getItem(index);
  48. item.setDrawable(params.tabIcon);
  49. refresh();
  50. }
  51. }
  52. private void setTitlesDisplayState() {
  53. if (AppStyle.appStyle.forceTitlesDisplay) {
  54. setTitleState(TitleState.ALWAYS_SHOW);
  55. } else if (hasTabsWithLabels()) {
  56. setTitleState(TitleState.SHOW_WHEN_ACTIVE);
  57. } else {
  58. setTitleState(TitleState.ALWAYS_HIDE);
  59. }
  60. }
  61. private boolean hasTabsWithLabels() {
  62. for (int i = 0; i < getItemsCount(); i++) {
  63. String title = getItem(0).getTitle(getContext());
  64. if (!TextUtils.isEmpty(title)) {
  65. return true;
  66. }
  67. }
  68. return false;
  69. }
  70. public void setVisibility(boolean hidden, boolean animated) {
  71. if (visibilityAnimator != null) {
  72. visibilityAnimator.setVisible(!hidden, animated);
  73. } else {
  74. setVisibility(hidden);
  75. }
  76. }
  77. private void setBackgroundColor(StyleParams.Color bottomTabsColor) {
  78. if (bottomTabsColor.hasColor()) {
  79. setDefaultBackgroundColor(bottomTabsColor.getColor());
  80. } else {
  81. setDefaultBackgroundColor(Color.WHITE);
  82. }
  83. }
  84. private void setVisibility(boolean bottomTabsHidden) {
  85. setVisibility(bottomTabsHidden ? GONE : VISIBLE);
  86. }
  87. private void createVisibilityAnimator() {
  88. visibilityAnimator = new VisibilityAnimator(BottomTabs.this,
  89. VisibilityAnimator.HideDirection.Down,
  90. (int) ViewUtils.convertDpToPixel(Constants.BOTTOM_TABS_HEIGHT));
  91. }
  92. private void setStyle() {
  93. if (hasBadgeBackgroundColor()) {
  94. setNotificationBackgroundColor(AppStyle.appStyle.bottomTabBadgeBackgroundColor.getColor());
  95. }
  96. if (hasBadgeTextColor()) {
  97. setNotificationTextColor(AppStyle.appStyle.bottomTabBadgeTextColor.getColor());
  98. }
  99. }
  100. private boolean hasBadgeTextColor() {
  101. return AppStyle.appStyle.bottomTabBadgeTextColor != null &&
  102. AppStyle.appStyle.bottomTabBadgeTextColor.hasColor();
  103. }
  104. private boolean hasBadgeBackgroundColor() {
  105. return AppStyle.appStyle.bottomTabBadgeBackgroundColor != null &&
  106. AppStyle.appStyle.bottomTabBadgeBackgroundColor.hasColor();
  107. }
  108. private void setFontFamily() {
  109. if (AppStyle.appStyle.bottomTabFontFamily.hasFont()) {
  110. setTitleTypeface(AppStyle.appStyle.bottomTabFontFamily.get());
  111. }
  112. }
  113. }