瀏覽代碼

Some work towards proper bottom tabs styling

Guy Carmeli 8 年之前
父節點
當前提交
be537459b3

+ 1
- 1
android/app/build.gradle 查看文件

46
 
46
 
47
 dependencies {
47
 dependencies {
48
     compile fileTree(dir: "libs", include: ["*.jar"])
48
     compile fileTree(dir: "libs", include: ["*.jar"])
49
-    compile "com.aurelhubert:ahbottomnavigation:1.2.3"
49
+    compile "com.aurelhubert:ahbottomnavigation:1.3.0"
50
     compile "com.android.support:appcompat-v7:23.0.1"
50
     compile "com.android.support:appcompat-v7:23.0.1"
51
     compile 'com.android.support:design:23.1.1'
51
     compile 'com.android.support:design:23.1.1'
52
     compile "com.facebook.react:react-native:+"  // From node_modules
52
     compile "com.facebook.react:react-native:+"  // From node_modules

+ 4
- 12
android/app/src/main/java/com/reactnativenavigation/layouts/BottomTabsLayout.java 查看文件

55
 
55
 
56
     private void createBottomTabs() {
56
     private void createBottomTabs() {
57
         bottomTabs = new BottomTabs(getContext());
57
         bottomTabs = new BottomTabs(getContext());
58
-        setBottomTabsStyle();
59
         bottomTabs.addTabs(params.tabParams, this);
58
         bottomTabs.addTabs(params.tabParams, this);
60
     }
59
     }
61
 
60
 
69
         showStack(screenStacks[0]);
68
         showStack(screenStacks[0]);
70
     }
69
     }
71
 
70
 
72
-    private void setBottomTabsStyle() {
73
-//        bottomTabs.setForceTitlesDisplay(style.getBoolean(TAB_STYLE_INACTIVE_TITLES, DEFAULT_TAB_INACTIVE_TITLES));
74
-        bottomTabs.setForceTint(true);
75
-//        bottomTabs.setDefaultBackgroundColor(getColor(style, TAB_STYLE_BAR_BG_COLOR, DEFAULT_TAB_BAR_BG_COLOR));
76
-//        bottomTabs.setInactiveColor(getColor(style, TAB_STYLE_BUTTON_COLOR, DEFAULT_TAB_BUTTON_COLOR));
77
-//        bottomTabs.setAccentColor(getColor(style, TAB_STYLE_SELECTED_COLOR, DEFAULT_TAB_SELECTED_COLOR));
78
-    }
79
-
80
     @Override
71
     @Override
81
     public View asView() {
72
     public View asView() {
82
         return this;
73
         return this;
150
     public void destroy() {
141
     public void destroy() {
151
         for (ScreenStack screenStack : screenStacks) {
142
         for (ScreenStack screenStack : screenStacks) {
152
             screenStack.destroy();
143
             screenStack.destroy();
153
-            removeView(screenStack);
154
         }
144
         }
155
-        screenStacks = null;
156
     }
145
     }
157
 
146
 
158
     @Override
147
     @Override
159
-    public void onTabSelected(int position, boolean wasSelected) {
148
+    public boolean onTabSelected(int position, boolean wasSelected) {
160
         hideCurrentStack();
149
         hideCurrentStack();
161
 
150
 
162
         ScreenStack newStack = screenStacks[position];
151
         ScreenStack newStack = screenStacks[position];
163
         showStack(newStack);
152
         showStack(newStack);
164
         currentStackIndex = position;
153
         currentStackIndex = position;
154
+
155
+        return true;
165
     }
156
     }
166
 
157
 
167
     private void showStack(ScreenStack newStack) {
158
     private void showStack(ScreenStack newStack) {
168
         newStack.setVisibility(VISIBLE);
159
         newStack.setVisibility(VISIBLE);
160
+        bottomTabs.setStyleFromScreen(newStack.getCurrentScreenStyleParams());
169
     }
161
     }
170
 
162
 
171
     private void hideCurrentStack() {
163
     private void hideCurrentStack() {

+ 11
- 3
android/app/src/main/java/com/reactnativenavigation/params/ScreenStyleParams.java 查看文件

24
     }
24
     }
25
 
25
 
26
     public Color statusBarColor;
26
     public Color statusBarColor;
27
+
27
     public Color topBarColor;
28
     public Color topBarColor;
28
-    public Color navigationBarColor;
29
-    public boolean titleBarHidden;
30
     public boolean topBarHidden;
29
     public boolean topBarHidden;
31
-    public boolean backButtonHidden;
32
     public boolean topTabsHidden;
30
     public boolean topTabsHidden;
31
+
32
+    public boolean titleBarHidden;
33
+    public boolean backButtonHidden;
34
+
33
     public boolean bottomTabsHidden;
35
     public boolean bottomTabsHidden;
34
     public boolean bottomTabsHiddenOnScroll;
36
     public boolean bottomTabsHiddenOnScroll;
37
+    public Color bottomTabsColor;
38
+    public Color selectedBottomTabsButtonColor;
39
+    public Color bottomTabsButtonColor;
40
+
41
+    public Color navigationBarColor;
42
+
35
     public boolean drawUnderTopBar;
43
     public boolean drawUnderTopBar;
36
 }
44
 }

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/params/parsers/ScreenStyleParamsParser.java 查看文件

19
         result.topTabsHidden = params.getBoolean("topTabsHidden");
19
         result.topTabsHidden = params.getBoolean("topTabsHidden");
20
         result.bottomTabsHidden = params.getBoolean("bottomTabsHidden");
20
         result.bottomTabsHidden = params.getBoolean("bottomTabsHidden");
21
         result.bottomTabsHiddenOnScroll = params.getBoolean("bottomTabsHiddenOnScroll");
21
         result.bottomTabsHiddenOnScroll = params.getBoolean("bottomTabsHiddenOnScroll");
22
+        result.bottomTabsColor = new ScreenStyleParams.Color(ColorParser.parse(params.getString("bottomTabsColor")));
22
         result.drawUnderTopBar = params.getBoolean("drawUnderTopBar", false);
23
         result.drawUnderTopBar = params.getBoolean("drawUnderTopBar", false);
23
         return result;
24
         return result;
24
     }
25
     }

+ 4
- 0
android/app/src/main/java/com/reactnativenavigation/screens/Screen.java 查看文件

153
                                       TitleBarLeftButtonParams titleBarLeftButtonParams) {
153
                                       TitleBarLeftButtonParams titleBarLeftButtonParams) {
154
         topBar.setTitleBarRightButton(navigatorEventId, backButtonListener, titleBarLeftButtonParams);
154
         topBar.setTitleBarRightButton(navigatorEventId, backButtonListener, titleBarLeftButtonParams);
155
     }
155
     }
156
+
157
+    public ScreenStyleParams getStyleParams() {
158
+        return screenParams.styleParams;
159
+    }
156
 }
160
 }

+ 5
- 0
android/app/src/main/java/com/reactnativenavigation/screens/ScreenStack.java 查看文件

5
 import android.widget.FrameLayout;
5
 import android.widget.FrameLayout;
6
 
6
 
7
 import com.reactnativenavigation.params.ScreenParams;
7
 import com.reactnativenavigation.params.ScreenParams;
8
+import com.reactnativenavigation.params.ScreenStyleParams;
8
 import com.reactnativenavigation.params.TitleBarButtonParams;
9
 import com.reactnativenavigation.params.TitleBarButtonParams;
9
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
10
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
10
 import com.reactnativenavigation.views.TitleBarBackButtonListener;
11
 import com.reactnativenavigation.views.TitleBarBackButtonListener;
154
             screen.preventMountAfterReattachedToWindow();
155
             screen.preventMountAfterReattachedToWindow();
155
         }
156
         }
156
     }
157
     }
158
+
159
+    public ScreenStyleParams getCurrentScreenStyleParams() {
160
+        return stack.peek().getStyleParams();
161
+    }
157
 }
162
 }

+ 14
- 0
android/app/src/main/java/com/reactnativenavigation/views/BottomTabs.java 查看文件

6
 import com.aurelhubert.ahbottomnavigation.AHBottomNavigation;
6
 import com.aurelhubert.ahbottomnavigation.AHBottomNavigation;
7
 import com.aurelhubert.ahbottomnavigation.AHBottomNavigationItem;
7
 import com.aurelhubert.ahbottomnavigation.AHBottomNavigationItem;
8
 import com.reactnativenavigation.params.ScreenParams;
8
 import com.reactnativenavigation.params.ScreenParams;
9
+import com.reactnativenavigation.params.ScreenStyleParams;
9
 
10
 
10
 import java.util.List;
11
 import java.util.List;
11
 
12
 
12
 public class BottomTabs extends AHBottomNavigation {
13
 public class BottomTabs extends AHBottomNavigation {
13
     public BottomTabs(Context context) {
14
     public BottomTabs(Context context) {
14
         super(context);
15
         super(context);
16
+        setForceTint(true);
15
     }
17
     }
16
 
18
 
17
     public void addTabs(List<ScreenParams> params, OnTabSelectedListener onTabSelectedListener) {
19
     public void addTabs(List<ScreenParams> params, OnTabSelectedListener onTabSelectedListener) {
22
             setOnTabSelectedListener(onTabSelectedListener);
24
             setOnTabSelectedListener(onTabSelectedListener);
23
         }
25
         }
24
     }
26
     }
27
+
28
+    public void setStyleFromScreen(ScreenStyleParams params) {
29
+        if (params.bottomTabsColor.hasColor()) {
30
+            setDefaultBackgroundColor(params.bottomTabsColor.getColor());
31
+        } else {
32
+            setDefaultBackgroundColor(Color.WHITE);
33
+        }
34
+
35
+//        setForceTitlesDisplay(true);
36
+//        setInactiveColor(params.bottomTabsButtonColor.getColor());
37
+//        setAccentColor(params.selectedBottomTabsButtonColor.getColor());
38
+    }
25
 }
39
 }

+ 4
- 1
src/deprecated/platformSpecificDeprecated.android.js 查看文件

90
     topTabsHidden: navigatorStyle.topTabsHidden,
90
     topTabsHidden: navigatorStyle.topTabsHidden,
91
     bottomTabsHidden: navigatorStyle.tabBarHidden,
91
     bottomTabsHidden: navigatorStyle.tabBarHidden,
92
     bottomTabsHiddenOnScroll: navigatorStyle.bottomTabsHiddenOnScroll,
92
     bottomTabsHiddenOnScroll: navigatorStyle.bottomTabsHiddenOnScroll,
93
-    drawUnderTopBar: navigatorStyle.drawUnderNavBar
93
+    drawUnderTopBar: navigatorStyle.drawUnderNavBar,
94
+    bottomTabsColor: navigatorStyle.tabBarBackgroundColor,
95
+    bottomTabsButtonColor: navigatorStyle.tabBarButtonColor,
96
+    selectedBottomTabsButtonColor: navigatorStyle.tabBarButtonColor
94
   };
97
   };
95
 
98
 
96
   return _.omit(screen, ['navigatorStyle']);
99
   return _.omit(screen, ['navigatorStyle']);