react-native-navigation的迁移库

BottomTabs.java 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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. setFontSize();
  24. setTabsHideShadow();
  25. }
  26. public void addTabs(List<ScreenParams> params, OnTabSelectedListener onTabSelectedListener) {
  27. for (ScreenParams screenParams : params) {
  28. AHBottomNavigationItem item = new AHBottomNavigationItem(screenParams.tabLabel, screenParams.tabIcon,
  29. Color.GRAY);
  30. addItem(item);
  31. setOnTabSelectedListener(onTabSelectedListener);
  32. }
  33. setTitlesDisplayState();
  34. }
  35. public void setStyleFromScreen(StyleParams params) {
  36. if (params.bottomTabsColor.hasColor()) {
  37. setBackgroundColor(params.bottomTabsColor);
  38. }
  39. if (params.bottomTabsButtonColor.hasColor()) {
  40. if (getInactiveColor() != params.bottomTabsButtonColor.getColor()) {
  41. setInactiveColor(params.bottomTabsButtonColor.getColor());
  42. }
  43. }
  44. if (params.selectedBottomTabsButtonColor.hasColor()) {
  45. if (getAccentColor() != params.selectedBottomTabsButtonColor.getColor()) {
  46. setAccentColor(params.selectedBottomTabsButtonColor.getColor());
  47. }
  48. }
  49. setVisibility(params.bottomTabsHidden, true);
  50. }
  51. public void setTabButton(ScreenParams params, Integer index) {
  52. if (params.tabIcon != null || params.tabLabel != null) {
  53. AHBottomNavigationItem item = this.getItem(index);
  54. boolean tabNeedsRefresh = false;
  55. if (params.tabIcon != null) {
  56. item.setDrawable(params.tabIcon);
  57. tabNeedsRefresh = true;
  58. }
  59. if (params.tabLabel != null) {
  60. item.setTitle(params.tabLabel);
  61. tabNeedsRefresh = true;
  62. }
  63. if (tabNeedsRefresh) {
  64. this.refresh();
  65. }
  66. }
  67. }
  68. private void setTitlesDisplayState() {
  69. if (AppStyle.appStyle.forceTitlesDisplay) {
  70. setTitleState(TitleState.ALWAYS_SHOW);
  71. } else if (hasTabsWithLabels()) {
  72. setTitleState(TitleState.SHOW_WHEN_ACTIVE);
  73. } else {
  74. setTitleState(TitleState.ALWAYS_HIDE);
  75. }
  76. }
  77. private boolean hasTabsWithLabels() {
  78. for (int i = 0; i < getItemsCount(); i++) {
  79. String title = getItem(i).getTitle(getContext());
  80. if (!TextUtils.isEmpty(title)) {
  81. return true;
  82. }
  83. }
  84. return false;
  85. }
  86. public void setVisibilityByInitialScreen(StyleParams styleParams) {
  87. setVisibility(styleParams.bottomTabsHidden, false);
  88. }
  89. public void setVisibility(boolean hidden, boolean animated) {
  90. if (visibilityAnimator != null) {
  91. visibilityAnimator.setVisible(!hidden, animated, null);
  92. } else {
  93. setVisibility(hidden);
  94. }
  95. }
  96. public void setCurrentItemWithoutInvokingTabSelectedListener(Integer index) {
  97. setCurrentItem(index, false);
  98. }
  99. private void setBackgroundColor(StyleParams.Color bottomTabsColor) {
  100. if (bottomTabsColor.hasColor()) {
  101. if (bottomTabsColor.getColor() != getDefaultBackgroundColor()) {
  102. setDefaultBackgroundColor(bottomTabsColor.getColor());
  103. }
  104. } else if (Color.WHITE != getDefaultBackgroundColor()){
  105. setDefaultBackgroundColor(Color.WHITE);
  106. }
  107. }
  108. private void setVisibility(boolean bottomTabsHidden) {
  109. setVisibility(bottomTabsHidden ? GONE : VISIBLE);
  110. }
  111. private void createVisibilityAnimator() {
  112. visibilityAnimator = new VisibilityAnimator(BottomTabs.this,
  113. VisibilityAnimator.HideDirection.Down,
  114. Constants.BOTTOM_TABS_HEIGHT);
  115. }
  116. private void setStyle() {
  117. if (hasBadgeBackgroundColor()) {
  118. setNotificationBackgroundColor(AppStyle.appStyle.bottomTabBadgeBackgroundColor.getColor());
  119. }
  120. if (hasBadgeTextColor()) {
  121. setNotificationTextColor(AppStyle.appStyle.bottomTabBadgeTextColor.getColor());
  122. }
  123. }
  124. private boolean hasBadgeTextColor() {
  125. return AppStyle.appStyle.bottomTabBadgeTextColor != null &&
  126. AppStyle.appStyle.bottomTabBadgeTextColor.hasColor();
  127. }
  128. private boolean hasBadgeBackgroundColor() {
  129. return AppStyle.appStyle.bottomTabBadgeBackgroundColor != null &&
  130. AppStyle.appStyle.bottomTabBadgeBackgroundColor.hasColor();
  131. }
  132. private void setFontFamily() {
  133. if (AppStyle.appStyle.bottomTabFontFamily.hasFont()) {
  134. setTitleTypeface(AppStyle.appStyle.bottomTabFontFamily.get());
  135. }
  136. }
  137. private void setFontSize() {
  138. if(AppStyle.appStyle.bottomTabSelectedFontSize != null && AppStyle.appStyle.bottomTabFontSize != null) {
  139. setTitleTextSizeInSp(AppStyle.appStyle.bottomTabSelectedFontSize, AppStyle.appStyle.bottomTabFontSize);
  140. }
  141. }
  142. private void setTabsHideShadow() {
  143. setUseElevation(!AppStyle.appStyle.bottomTabsHideShadow);
  144. }
  145. }