diff --git a/docs/_sidebar.md b/docs/_sidebar.md
index fc134f2d956..51f0e12188f 100644
--- a/docs/_sidebar.md
+++ b/docs/_sidebar.md
@@ -11,6 +11,7 @@
- Options
- [NavigationOptions](/docs/options/NavigationOptions)
- [TopBar](/docs/options/TopBar)
+ - [TopTabs](/docs/options/TopTabs)
- [TopTab](/docs/options/TopTab)
- [Button](/docs/options/Button)
- [BottomTabs](/docs/options/BottomTabs)
diff --git a/docs/docs/Container.md b/docs/docs/Container.md
index 130d00b60e4..a9cc7f7b471 100644
--- a/docs/docs/Container.md
+++ b/docs/docs/Container.md
@@ -5,6 +5,7 @@
| Name | Type | Description |
| --- | --- | --- |
| name | string | The container's registered name |
+| topTabs | [Array.<Container>](#Container) | |
| passProps | object | props |
| navigationOptions | NavigationOptions | |
diff --git a/docs/docs/Navigation.md b/docs/docs/Navigation.md
index 1f5549ed05a..88ff4308c16 100644
--- a/docs/docs/Navigation.md
+++ b/docs/docs/Navigation.md
@@ -10,7 +10,7 @@
* [.showModal(params)](#Navigation+showModal)
* [.dismissModal(containerId)](#Navigation+dismissModal)
* [.dismissAllModals()](#Navigation+dismissAllModals)
- * [.push(containerId, params)](#Navigation+push)
+ * [.push(containerId, container)](#Navigation+push)
* [.pop(containerId, params)](#Navigation+pop)
* [.popTo(containerId)](#Navigation+popTo)
* [.popToRoot(containerId)](#Navigation+popToRoot)
@@ -109,14 +109,14 @@ Dismiss all Modals
-## navigation.push(containerId, params)
+## navigation.push(containerId, container)
Push a new screen into this screen's navigation stack.
| Param | Type | Description |
| --- | --- | --- |
| containerId | string | The container's id. |
-| params | * | |
+| container | Container | |
* * *
diff --git a/docs/docs/options/BottomTabs.md b/docs/docs/options/BottomTabs.md
index 6ac26dc8696..0095bc038bf 100644
--- a/docs/docs/options/BottomTabs.md
+++ b/docs/docs/options/BottomTabs.md
@@ -9,4 +9,5 @@
| hidden | boolean |
| animateHide | boolean |
| testID | string |
+| drawUnder | boolean |
diff --git a/docs/docs/options/NavigationOptions.md b/docs/docs/options/NavigationOptions.md
index 01820dfaaad..21406e09e40 100644
--- a/docs/docs/options/NavigationOptions.md
+++ b/docs/docs/options/NavigationOptions.md
@@ -8,6 +8,7 @@
| bottomTabs | BottomTabs |
| bottomTab | BottomTab |
| orientation | string |
+| topTabs | TopTabs |
| rightButtons | Button[] |
| leftButtons | Button[] |
diff --git a/docs/docs/options/TopBar.md b/docs/docs/options/TopBar.md
index 8706212b4a4..99eddd3a38b 100644
--- a/docs/docs/options/TopBar.md
+++ b/docs/docs/options/TopBar.md
@@ -19,4 +19,5 @@
| blur | boolean |
| noBorder | boolean |
| largeTitle | boolean |
+| drawUnder | boolean |
diff --git a/docs/docs/options/TopTabs.md b/docs/docs/options/TopTabs.md
new file mode 100644
index 00000000000..00f48a34591
--- /dev/null
+++ b/docs/docs/options/TopTabs.md
@@ -0,0 +1,10 @@
+
TopTabs
+
+**Properties**
+
+| Name | Type | Description |
+| --- | --- | --- |
+| selectedTabColor | string | Selected tab color |
+| unselectedTabColor | string | Unselected tab color |
+| fontSize | int | |
+
diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/Color.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/Color.java
new file mode 100644
index 00000000000..23b2e290277
--- /dev/null
+++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/Color.java
@@ -0,0 +1,16 @@
+package com.reactnativenavigation.parse;
+
+import android.support.annotation.ColorInt;
+
+public class Color extends Param{
+
+ public Color(@ColorInt int color) {
+ super(color);
+ }
+
+ @SuppressWarnings("MagicNumber")
+ @Override
+ public String toString() {
+ return String.format("#%06X", (0xFFFFFF & get()));
+ }
+}
diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/ColorParser.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/ColorParser.java
index 7c5826d6636..59c7d814100 100644
--- a/lib/android/app/src/main/java/com/reactnativenavigation/parse/ColorParser.java
+++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/ColorParser.java
@@ -1,8 +1,5 @@
package com.reactnativenavigation.parse;
-import com.reactnativenavigation.views.style.Color;
-import com.reactnativenavigation.views.style.NullColor;
-
import org.json.JSONObject;
public class ColorParser {
diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/style/NullColor.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NullColor.java
similarity index 55%
rename from lib/android/app/src/main/java/com/reactnativenavigation/views/style/NullColor.java
rename to lib/android/app/src/main/java/com/reactnativenavigation/parse/NullColor.java
index 3513b0e1460..fd8256515c1 100644
--- a/lib/android/app/src/main/java/com/reactnativenavigation/views/style/NullColor.java
+++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NullColor.java
@@ -1,16 +1,16 @@
-package com.reactnativenavigation.views.style;
+package com.reactnativenavigation.parse;
public class NullColor extends Color {
- public NullColor() {
+ NullColor() {
super(0);
}
- public boolean hasColor() {
+ @Override
+ public boolean hasValue() {
return false;
}
- @SuppressWarnings("MagicNumber")
@Override
public String toString() {
return "Null Color";
diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/NullNumber.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NullNumber.java
new file mode 100644
index 00000000000..aa5cd252b74
--- /dev/null
+++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NullNumber.java
@@ -0,0 +1,12 @@
+package com.reactnativenavigation.parse;
+
+public class NullNumber extends Number {
+ public NullNumber() {
+ super(0);
+ }
+
+ @Override
+ public boolean hasValue() {
+ return false;
+ }
+}
diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/Number.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/Number.java
new file mode 100644
index 00000000000..9438fb21c46
--- /dev/null
+++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/Number.java
@@ -0,0 +1,8 @@
+package com.reactnativenavigation.parse;
+
+public class Number extends Param {
+
+ public Number(int value) {
+ super(value);
+ }
+}
diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/NumberParser.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NumberParser.java
new file mode 100644
index 00000000000..070e581e6d0
--- /dev/null
+++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NumberParser.java
@@ -0,0 +1,9 @@
+package com.reactnativenavigation.parse;
+
+import org.json.JSONObject;
+
+public class NumberParser {
+ public static Number parse(JSONObject json, String number) {
+ return json.has(number) ? new Number(json.optInt(number)) : new NullNumber();
+ }
+}
diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/Param.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/Param.java
new file mode 100644
index 00000000000..4b0c1870315
--- /dev/null
+++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/Param.java
@@ -0,0 +1,20 @@
+package com.reactnativenavigation.parse;
+
+public abstract class Param {
+ protected T value;
+
+ public Param(T value) {
+ this.value = value;
+ }
+
+ public T get() {
+ if (hasValue()) {
+ return value;
+ }
+ throw new RuntimeException("Tried to get null value!");
+ }
+
+ public boolean hasValue() {
+ return value != null;
+ }
+}
diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/TopTabsOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/TopTabsOptions.java
index 1717682ff1a..c5f88274bff 100644
--- a/lib/android/app/src/main/java/com/reactnativenavigation/parse/TopTabsOptions.java
+++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/TopTabsOptions.java
@@ -3,39 +3,32 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import com.reactnativenavigation.views.style.Color;
-import com.reactnativenavigation.views.style.NullColor;
-
import org.json.JSONObject;
public class TopTabsOptions implements DEFAULT_VALUES {
@NonNull public Color selectedTabColor = new NullColor();
@NonNull public Color unselectedTabColor = new NullColor();
+ @NonNull public Number fontSize = new NullNumber();
public static TopTabsOptions parse(@Nullable JSONObject json) {
TopTabsOptions result = new TopTabsOptions();
if (json == null) return result;
result.selectedTabColor = ColorParser.parse(json, "selectedTabColor");
result.unselectedTabColor = ColorParser.parse(json, "unselectedTabColor");
+ result.fontSize = NumberParser.parse(json, "fontSize");
return result;
}
void mergeWith(TopTabsOptions other) {
- if (other.selectedTabColor.hasColor()) {
- selectedTabColor = other.selectedTabColor;
- }
- if (other.unselectedTabColor.hasColor()) {
- unselectedTabColor = other.unselectedTabColor;
- }
+ if (other.selectedTabColor.hasValue()) selectedTabColor = other.selectedTabColor;
+ if (other.unselectedTabColor.hasValue()) unselectedTabColor = other.unselectedTabColor;
+ if (other.fontSize.hasValue()) fontSize = other.fontSize;
}
void mergeWithDefault(TopTabsOptions defaultOptions) {
- if (!selectedTabColor.hasColor()) {
- selectedTabColor = defaultOptions.selectedTabColor;
- }
- if (!unselectedTabColor.hasColor()) {
- unselectedTabColor = defaultOptions.unselectedTabColor;
- }
+ if (!selectedTabColor.hasValue()) selectedTabColor = defaultOptions.selectedTabColor;
+ if (!unselectedTabColor.hasValue()) unselectedTabColor = defaultOptions.unselectedTabColor;
+ if (!fontSize.hasValue()) fontSize = defaultOptions.fontSize;
}
}
diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/presentation/OptionsPresenter.java b/lib/android/app/src/main/java/com/reactnativenavigation/presentation/OptionsPresenter.java
index 46218990e63..03a55fa63eb 100644
--- a/lib/android/app/src/main/java/com/reactnativenavigation/presentation/OptionsPresenter.java
+++ b/lib/android/app/src/main/java/com/reactnativenavigation/presentation/OptionsPresenter.java
@@ -74,6 +74,7 @@ private void applyButtons(ArrayList