Kaynağa Gözat

Set RelativeLayout as TopBar root component

motivation: ability to add react view as TopBar background
Guy Carmeli 6 yıl önce
ebeveyn
işleme
e00b4c8896

+ 2
- 5
lib/android/app/src/main/java/com/reactnativenavigation/presentation/OptionsPresenter.java Dosyayı Görüntüle

38
 
38
 
39
     private void applyTopBarOptions(TopBarOptions options, AnimationsOptions animationOptions, Component component) {
39
     private void applyTopBarOptions(TopBarOptions options, AnimationsOptions animationOptions, Component component) {
40
         if (options.title.text.hasValue()) topBar.setTitle(options.title.text.get());
40
         if (options.title.text.hasValue()) topBar.setTitle(options.title.text.get());
41
-        if (options.title.component.hasValue())
42
-            topBar.setComponent(options.title.component.get(), options.title.alignment);
41
+        if (options.title.component.hasValue()) topBar.setComponent(options.title.component.get(), options.title.alignment);
43
         topBar.setBackgroundColor(options.background.color);
42
         topBar.setBackgroundColor(options.background.color);
44
         topBar.setTitleTextColor(options.title.color);
43
         topBar.setTitleTextColor(options.title.color);
45
         topBar.setTitleFontSize(options.title.fontSize);
44
         topBar.setTitleFontSize(options.title.fontSize);
86
     }
85
     }
87
 
86
 
88
     private void applyTopTabOptions(TopTabOptions topTabOptions) {
87
     private void applyTopTabOptions(TopTabOptions topTabOptions) {
89
-        if (topTabOptions.fontFamily != null) {
90
-            topBar.setTopTabFontFamily(topTabOptions.tabIndex, topTabOptions.fontFamily);
91
-        }
88
+        if (topTabOptions.fontFamily != null) topBar.setTopTabFontFamily(topTabOptions.tabIndex, topTabOptions.fontFamily);
92
     }
89
     }
93
 
90
 
94
     public void onChildWillDisappear(Options disappearing, Options appearing, @NonNull ChildDisappearListener childDisappearListener) {
91
     public void onChildWillDisappear(Options disappearing, Options appearing, @NonNull ChildDisappearListener childDisappearListener) {

+ 17
- 6
lib/android/app/src/main/java/com/reactnativenavigation/views/TopBar.java Dosyayı Görüntüle

10
 import android.support.v4.view.ViewPager;
10
 import android.support.v4.view.ViewPager;
11
 import android.support.v7.widget.Toolbar;
11
 import android.support.v7.widget.Toolbar;
12
 import android.view.View;
12
 import android.view.View;
13
+import android.widget.RelativeLayout;
13
 import android.widget.TextView;
14
 import android.widget.TextView;
14
 
15
 
15
 import com.reactnativenavigation.anim.AnimationListener;
16
 import com.reactnativenavigation.anim.AnimationListener;
17
 import com.reactnativenavigation.anim.TopBarCollapseBehavior;
18
 import com.reactnativenavigation.anim.TopBarCollapseBehavior;
18
 import com.reactnativenavigation.interfaces.ScrollEventListener;
19
 import com.reactnativenavigation.interfaces.ScrollEventListener;
19
 import com.reactnativenavigation.parse.AnimationOptions;
20
 import com.reactnativenavigation.parse.AnimationOptions;
20
-import com.reactnativenavigation.parse.AnimationsOptions;
21
 import com.reactnativenavigation.parse.TitleOptions;
21
 import com.reactnativenavigation.parse.TitleOptions;
22
 import com.reactnativenavigation.parse.params.Button;
22
 import com.reactnativenavigation.parse.params.Button;
23
 import com.reactnativenavigation.parse.params.Color;
23
 import com.reactnativenavigation.parse.params.Color;
24
 import com.reactnativenavigation.parse.params.Fraction;
24
 import com.reactnativenavigation.parse.params.Fraction;
25
 import com.reactnativenavigation.parse.params.Number;
25
 import com.reactnativenavigation.parse.params.Number;
26
+import com.reactnativenavigation.utils.CompatUtils;
26
 import com.reactnativenavigation.viewcontrollers.ReactViewCreator;
27
 import com.reactnativenavigation.viewcontrollers.ReactViewCreator;
27
 import com.reactnativenavigation.viewcontrollers.TitleBarReactViewController;
28
 import com.reactnativenavigation.viewcontrollers.TitleBarReactViewController;
28
 import com.reactnativenavigation.viewcontrollers.TopBarButtonController;
29
 import com.reactnativenavigation.viewcontrollers.TopBarButtonController;
36
 
37
 
37
 @SuppressLint("ViewConstructor")
38
 @SuppressLint("ViewConstructor")
38
 public class TopBar extends AppBarLayout implements ScrollEventListener.ScrollAwareView {
39
 public class TopBar extends AppBarLayout implements ScrollEventListener.ScrollAwareView {
39
-    private final TitleBar titleBar;
40
+    private TitleBar titleBar;
40
     private final TopBarCollapseBehavior collapsingBehavior;
41
     private final TopBarCollapseBehavior collapsingBehavior;
41
     private TopBarAnimator animator;
42
     private TopBarAnimator animator;
42
     private TopTabs topTabs;
43
     private TopTabs topTabs;
44
+    private RelativeLayout root;
43
     private StackLayout parentView;
45
     private StackLayout parentView;
44
 
46
 
45
     public TopBar(final Context context, ReactViewCreator buttonCreator, TitleBarReactViewCreator titleBarReactViewCreator, TopBarButtonController.OnClickListener onClickListener, StackLayout parentView) {
47
     public TopBar(final Context context, ReactViewCreator buttonCreator, TitleBarReactViewCreator titleBarReactViewCreator, TopBarButtonController.OnClickListener onClickListener, StackLayout parentView) {
46
         super(context);
48
         super(context);
47
         collapsingBehavior = new TopBarCollapseBehavior(this);
49
         collapsingBehavior = new TopBarCollapseBehavior(this);
48
-        topTabs = new TopTabs(getContext());
49
         animator = new TopBarAnimator(this);
50
         animator = new TopBarAnimator(this);
50
         this.parentView = parentView;
51
         this.parentView = parentView;
51
-        titleBar = createTitleBar(context, buttonCreator, titleBarReactViewCreator, onClickListener);
52
-        addView(titleBar);
52
+        createLayout(buttonCreator, titleBarReactViewCreator, onClickListener);
53
+    }
54
+
55
+    private void createLayout(ReactViewCreator buttonCreator, TitleBarReactViewCreator titleBarReactViewCreator, TopBarButtonController.OnClickListener onClickListener) {
56
+        topTabs = new TopTabs(getContext());
57
+        titleBar = createTitleBar(getContext(), buttonCreator, titleBarReactViewCreator, onClickListener);
58
+        titleBar.setId(CompatUtils.generateViewId());
59
+        root = new RelativeLayout(getContext());
60
+        root.addView(titleBar, MATCH_PARENT, WRAP_CONTENT);
61
+        addView(root, MATCH_PARENT, WRAP_CONTENT);
53
         setContentDescription("TopBar");
62
         setContentDescription("TopBar");
54
     }
63
     }
55
 
64
 
129
     public void initTopTabs(ViewPager viewPager) {
138
     public void initTopTabs(ViewPager viewPager) {
130
         topTabs = new TopTabs(getContext());
139
         topTabs = new TopTabs(getContext());
131
         topTabs.init(viewPager);
140
         topTabs.init(viewPager);
132
-        addView(topTabs);
141
+        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT);
142
+        lp.addRule(RelativeLayout.BELOW, titleBar.getId());
143
+        root.addView(topTabs, lp);
133
     }
144
     }
134
 
145
 
135
     public void enableCollapse(ScrollEventListener scrollEventListener) {
146
     public void enableCollapse(ScrollEventListener scrollEventListener) {