diff --git a/docs/_sidebar.md b/docs/_sidebar.md
index 11a537e501d..fc134f2d956 100644
--- a/docs/_sidebar.md
+++ b/docs/_sidebar.md
@@ -11,6 +11,7 @@
- Options
- [NavigationOptions](/docs/options/NavigationOptions)
- [TopBar](/docs/options/TopBar)
+ - [TopTab](/docs/options/TopTab)
- [Button](/docs/options/Button)
- [BottomTabs](/docs/options/BottomTabs)
- [BottomTab](/docs/options/BottomTab)
diff --git a/docs/docs/options/TopTab.md b/docs/docs/options/TopTab.md
new file mode 100644
index 00000000000..9f97227e888
--- /dev/null
+++ b/docs/docs/options/TopTab.md
@@ -0,0 +1,9 @@
+
TopTab
+
+**Properties**
+
+| Name | Type | Description |
+| --- | --- | --- |
+| title | string | The tab's title in the TopTabs view |
+| titleFontFamily | string | Change the tab's title font family |
+
diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutFactory.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutFactory.java
index de1372adcb3..f509012867f 100644
--- a/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutFactory.java
+++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutFactory.java
@@ -4,6 +4,7 @@
import com.facebook.react.ReactInstanceManager;
import com.reactnativenavigation.react.ReactContainerViewCreator;
+import com.reactnativenavigation.utils.TypefaceLoader;
import com.reactnativenavigation.viewcontrollers.BottomTabsController;
import com.reactnativenavigation.viewcontrollers.ContainerViewController;
import com.reactnativenavigation.viewcontrollers.SideMenuController;
@@ -22,11 +23,13 @@ public class LayoutFactory {
private final Activity activity;
private final ReactInstanceManager reactInstanceManager;
private NavigationOptions defaultOptions;
+ private final TypefaceLoader typefaceManager;
public LayoutFactory(Activity activity, final ReactInstanceManager reactInstanceManager, NavigationOptions defaultOptions) {
this.activity = activity;
this.reactInstanceManager = reactInstanceManager;
this.defaultOptions = defaultOptions;
+ typefaceManager = new TypefaceLoader(activity);
}
public ViewController create(final LayoutNode node) {
@@ -92,7 +95,7 @@ private ViewController createSideMenuRight(LayoutNode node) {
private ViewController createContainer(LayoutNode node) {
String id = node.id;
String name = node.data.optString("name");
- NavigationOptions navigationOptions = NavigationOptions.parse(node.data.optJSONObject("navigationOptions"), defaultOptions);
+ NavigationOptions navigationOptions = NavigationOptions.parse(typefaceManager, node.data.optJSONObject("navigationOptions"), defaultOptions);
return new ContainerViewController(activity,
id,
name,
@@ -128,8 +131,10 @@ private ViewController createDialogContainer(LayoutNode node) {
private ViewController createTopTabs(LayoutNode node) {
final List tabs = new ArrayList<>();
- for (LayoutNode child : node.children) {
- tabs.add((TopTabController) create(child));
+ for (int i = 0; i < node.children.size(); i++) {
+ TopTabController tabController = (TopTabController) create(node.children.get(i));
+ tabController.setTabIndex(i);
+ tabs.add(tabController);
}
return new TopTabsController(activity, node.id, tabs);
}
@@ -137,7 +142,7 @@ private ViewController createTopTabs(LayoutNode node) {
private ViewController createTopTab(LayoutNode node) {
String id = node.id;
String name = node.data.optString("name");
- NavigationOptions navigationOptions = NavigationOptions.parse(node.data.optJSONObject("navigationOptions"), defaultOptions);
+ NavigationOptions navigationOptions = NavigationOptions.parse(typefaceManager, node.getNavigationOptions(), defaultOptions);
return new TopTabController(activity,
id,
name,
diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutNode.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutNode.java
index 8ffabd77a96..c5539912f93 100644
--- a/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutNode.java
+++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutNode.java
@@ -35,4 +35,8 @@ public enum Type {
this.data = data;
this.children = children;
}
+
+ JSONObject getNavigationOptions() {
+ return data.optJSONObject("navigationOptions");
+ }
}
diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/NavigationOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NavigationOptions.java
index 5faf803ee8d..dcd26112e8e 100644
--- a/lib/android/app/src/main/java/com/reactnativenavigation/parse/NavigationOptions.java
+++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NavigationOptions.java
@@ -2,6 +2,8 @@
import android.support.annotation.NonNull;
+import com.reactnativenavigation.utils.TypefaceLoader;
+
import org.json.JSONObject;
import java.util.ArrayList;
@@ -22,18 +24,18 @@ static BooleanOptions parse(String value) {
}
@NonNull
- public static NavigationOptions parse(JSONObject json) {
- return parse(json, new NavigationOptions());
+ public static NavigationOptions parse(TypefaceLoader typefaceManager, JSONObject json) {
+ return parse(typefaceManager, json, new NavigationOptions());
}
@NonNull
- public static NavigationOptions parse(JSONObject json, @NonNull NavigationOptions defaultOptions) {
+ public static NavigationOptions parse(TypefaceLoader typefaceManager, JSONObject json, @NonNull NavigationOptions defaultOptions) {
NavigationOptions result = new NavigationOptions();
if (json == null) return result;
result.topBarOptions = TopBarOptions.parse(json.optJSONObject("topBar"));
result.topTabsOptions = TopTabsOptions.parse(json.optJSONObject("topTabs"));
- result.topTabOptions = TopTabOptions.parse(json.optJSONObject("topTab"));
+ result.topTabOptions = TopTabOptions.parse(typefaceManager, json.optJSONObject("topTab"));
result.bottomTabsOptions = BottomTabsOptions.parse(json.optJSONObject("bottomTabs"));
result.rightButtons = Button.parseJsonArray(json.optJSONArray("rightButtons"));
result.leftButtons = Button.parseJsonArray(json.optJSONArray("leftButtons"));
@@ -42,7 +44,7 @@ public static NavigationOptions parse(JSONObject json, @NonNull NavigationOption
}
@NonNull public TopBarOptions topBarOptions = new TopBarOptions();
- @NonNull private TopTabsOptions topTabsOptions = new TopTabsOptions();
+ @NonNull public TopTabsOptions topTabsOptions = new TopTabsOptions();
@NonNull public TopTabOptions topTabOptions = new TopTabOptions();
@NonNull public BottomTabsOptions bottomTabsOptions = new BottomTabsOptions();
public ArrayList