Просмотр исходного кода

Support navBarTransparent on Android

Guy Carmeli 8 лет назад
Родитель
Сommit
30991e3077

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/params/StyleParams.java Просмотреть файл

@@ -43,6 +43,7 @@ public class StyleParams {
43 43
     public boolean drawScreenBelowTopBar;
44 44
 
45 45
     public boolean titleBarHidden;
46
+    public boolean topBarTransparent;
46 47
     public Color titleBarTitleColor;
47 48
     public Color titleBarSubtitleColor;
48 49
     public Color titleBarButtonColor;

+ 3
- 2
android/app/src/main/java/com/reactnativenavigation/params/parsers/StyleParamsParser.java Просмотреть файл

@@ -23,6 +23,7 @@ public class StyleParamsParser {
23 23
 
24 24
         result.topBarColor = getColor("topBarColor", getDefaultTopBarColor());
25 25
         result.titleBarHidden = getBoolean("titleBarHidden", getDefaultTopBarHidden());
26
+        result.topBarTransparent = getBoolean("topBarTransparent", getDefaultTopBarHidden());
26 27
         result.titleBarTitleColor = getColor("titleBarTitleColor", getDefaultTitleBarColor());
27 28
         result.titleBarSubtitleColor = getColor("titleBarSubtitleColor", getDefaultSubtitleBarColor());
28 29
         result.titleBarButtonColor = getColor("titleBarButtonColor", getTitleBarButtonColor());
@@ -37,7 +38,7 @@ public class StyleParamsParser {
37 38
 
38 39
         // TODO: Uncomment once we support drawBelowTopBar again
39 40
         //result.drawScreenBelowTopBar = params.getBoolean("drawBelowTopBar", isDefaultScreenBelowTopBar());
40
-        result.drawScreenBelowTopBar = true;
41
+        result.drawScreenBelowTopBar = !result.topBarTransparent;
41 42
 
42 43
         result.bottomTabsHidden = getBoolean("bottomTabsHidden", getDefaultBottomTabsHidden());
43 44
         result.drawScreenAboveBottomTabs = !result.bottomTabsHidden &&
@@ -142,7 +143,7 @@ public class StyleParamsParser {
142 143
     }
143 144
 
144 145
     private boolean getDefaultTopBarHidden() {
145
-        return AppStyle.appStyle != null && AppStyle.appStyle.titleBarHidden;
146
+        return AppStyle.appStyle != null && AppStyle.appStyle.topBarTransparent;
146 147
     }
147 148
 
148 149
     private StyleParams.Color getDefaultTopBarColor() {

+ 1
- 1
android/app/src/main/java/com/reactnativenavigation/screens/SingleScreen.java Просмотреть файл

@@ -24,7 +24,7 @@ public class SingleScreen extends Screen {
24 24
         if (screenParams.styleParams.drawScreenBelowTopBar) {
25 25
             params.addRule(BELOW, topBar.getId());
26 26
         }
27
-        addView(contentView, params);
27
+        addView(contentView, 0, params);
28 28
     }
29 29
 
30 30
     @Override

+ 13
- 0
android/app/src/main/java/com/reactnativenavigation/views/TopBar.java Просмотреть файл

@@ -1,6 +1,8 @@
1 1
 package com.reactnativenavigation.views;
2 2
 
3 3
 import android.content.Context;
4
+import android.graphics.Color;
5
+import android.os.Build;
4 6
 import android.support.design.widget.AppBarLayout;
5 7
 import android.support.design.widget.TabLayout;
6 8
 
@@ -44,11 +46,22 @@ public class TopBar extends AppBarLayout {
44 46
         if (styleParams.topBarColor.hasColor()) {
45 47
             setBackgroundColor(styleParams.topBarColor.getColor());
46 48
         }
49
+        if (styleParams.topBarTransparent) {
50
+            setTransparent();
51
+        }
47 52
         setVisibility(styleParams.topBarHidden ? GONE : VISIBLE);
48 53
         titleBar.setStyle(styleParams);
49 54
         setTopTabsStyle(styleParams);
50 55
     }
51 56
 
57
+    private void setTransparent() {
58
+        setBackgroundColor(Color.TRANSPARENT);
59
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
60
+            setElevation(0);
61
+            setOutlineProvider(null);
62
+        }
63
+    }
64
+
52 65
     public void setTitleBarRightButtons(String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
53 66
         titleBar.setRightButtons(titleBarButtons, navigatorEventId);
54 67
     }

+ 1
- 0
src/deprecated/platformSpecificDeprecated.android.js Просмотреть файл

@@ -116,6 +116,7 @@ function convertStyleParams(originalStyleObject) {
116 116
   return {
117 117
     statusBarColor: originalStyleObject.statusBarColor,
118 118
     topBarColor: originalStyleObject.navBarBackgroundColor,
119
+    topBarTransparent: originalStyleObject.navBarTransparent,
119 120
     titleBarHidden: originalStyleObject.navBarHidden,
120 121
     titleBarTitleColor: originalStyleObject.navBarTextColor,
121 122
     titleBarSubtitleColor: originalStyleObject.navBarTextSubtitleColor,