Browse Source

Support re-enabling top bar elevation (#2229)

When disabling elevation by setting topBarElevationShadowEnabled to false, this commit allows to re-enable it by setting the same property to true.
Elevation was previously disabled by using setOutlineProvider(null), with ViewOutlineProvider being an Android 5.0+ object responsible for determining how views draw their outline. To allow re-enabling elevation, we keep our original ViewOutlineProvider and restore it when elevation is enabled again.
Roberto Frenna 6 years ago
parent
commit
43d41be456

+ 9
- 6
android/app/src/main/java/com/reactnativenavigation/views/TopBar.java View File

10
 import android.support.v7.app.ActionBar;
10
 import android.support.v7.app.ActionBar;
11
 import android.view.Gravity;
11
 import android.view.Gravity;
12
 import android.view.ViewGroup;
12
 import android.view.ViewGroup;
13
+import android.view.ViewOutlineProvider;
13
 import android.widget.FrameLayout;
14
 import android.widget.FrameLayout;
14
 
15
 
15
 import com.facebook.react.bridge.Callback;
16
 import com.facebook.react.bridge.Callback;
36
     private VisibilityAnimator visibilityAnimator;
37
     private VisibilityAnimator visibilityAnimator;
37
     @Nullable
38
     @Nullable
38
     private Pair<String, ContentView> reactView;
39
     private Pair<String, ContentView> reactView;
40
+    private ViewOutlineProvider outlineProvider;
39
 
41
 
40
     public TopBar(Context context) {
42
     public TopBar(Context context) {
41
         super(context);
43
         super(context);
42
         setId(ViewUtils.generateViewId());
44
         setId(ViewUtils.generateViewId());
43
         createTopBarVisibilityAnimator();
45
         createTopBarVisibilityAnimator();
44
         createLayout();
46
         createLayout();
47
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
48
+            outlineProvider = getOutlineProvider();
49
+        }
45
     }
50
     }
46
 
51
 
47
     private void createTopBarVisibilityAnimator() {
52
     private void createTopBarVisibilityAnimator() {
167
         titleBar.setStyle(styleParams);
172
         titleBar.setStyle(styleParams);
168
         setReactView(styleParams);
173
         setReactView(styleParams);
169
         setTopTabsStyle(styleParams);
174
         setTopTabsStyle(styleParams);
170
-        if (!styleParams.topBarElevationShadowEnabled) {
171
-            disableElevationShadow();
172
-        }
175
+        setElevationEnabled(styleParams.topBarElevationShadowEnabled);
173
     }
176
     }
174
 
177
 
175
     private void setTransparent() {
178
     private void setTransparent() {
176
         setBackgroundColor(Color.TRANSPARENT);
179
         setBackgroundColor(Color.TRANSPARENT);
177
-        disableElevationShadow();
180
+        setElevationEnabled(false);
178
     }
181
     }
179
 
182
 
180
-    private void disableElevationShadow() {
183
+    private void setElevationEnabled (boolean enabled) {
181
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
184
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
182
-            setOutlineProvider(null);
185
+            setOutlineProvider(enabled ? outlineProvider : null);
183
         }
186
         }
184
     }
187
     }
185
 
188