diff --git a/e2e/Buttons.test.js b/e2e/Buttons.test.js index 73d7f13c145..1004835aab3 100644 --- a/e2e/Buttons.test.js +++ b/e2e/Buttons.test.js @@ -1,11 +1,11 @@ import Utils from './Utils'; import TestIDs from '../playground/src/testIDs'; -const {elementById, elementByLabel} = Utils; +const { elementById, elementByLabel } = Utils; describe('Buttons', () => { beforeEach(async () => { - await device.launchApp({newInstance: true}); + await device.launchApp({ newInstance: true }); await elementById(TestIDs.OPTIONS_TAB).tap(); await elementById(TestIDs.GOTO_BUTTONS_SCREEN).tap(); }); @@ -51,4 +51,9 @@ describe('Buttons', () => { await elementById(TestIDs.BACK_BUTTON).tap(); await expect(elementByLabel('Buttons')).toBeVisible(); }); + + it('resizes title component when a button is added with mergeOptions', async () => { + await elementById(TestIDs.ADD_BUTTON).tap(); + await elementById(TestIDs.BUTTON_THREE).tap(); + }); }); diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.java b/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.java index fffede524d2..cd801ffc61a 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.java @@ -2,10 +2,13 @@ import android.annotation.SuppressLint; import android.content.Context; +import android.view.Gravity; import com.facebook.react.ReactInstanceManager; import com.reactnativenavigation.react.ReactView; +import androidx.appcompat.widget.Toolbar; + @SuppressLint("ViewConstructor") public class TitleBarReactView extends ReactView { @@ -16,8 +19,18 @@ public TitleBarReactView(Context context, ReactInstanceManager reactInstanceMana @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure( - (getChildCount() > 0 && getChildAt(0).getWidth() > 0) ? MeasureSpec.makeMeasureSpec(getChildAt(0).getWidth(), MeasureSpec.EXACTLY) : widthMeasureSpec, + getWidthMeasureSpec(widthMeasureSpec), heightMeasureSpec ); } + + private int getWidthMeasureSpec(int currentSpec) { + return (isCenter() && getChildCount() > 0 && getChildAt(0).getWidth() > 0) ? + MeasureSpec.makeMeasureSpec(getChildAt(0).getWidth(), MeasureSpec.EXACTLY) : + currentSpec; + } + + private boolean isCenter() { + return ((Toolbar.LayoutParams) getLayoutParams()).gravity == Gravity.CENTER; + } } diff --git a/playground/src/screens/ButtonsScreen.tsx b/playground/src/screens/ButtonsScreen.tsx index 268ed8e3dbf..ea2a357806e 100644 --- a/playground/src/screens/ButtonsScreen.tsx +++ b/playground/src/screens/ButtonsScreen.tsx @@ -12,6 +12,8 @@ const { TOP_BAR, ROUND_BUTTON, BUTTON_ONE, + BUTTON_THREE, + ADD_BUTTON, LEFT_BUTTON, SHOW_LIFECYCLE_BTN, RESET_BUTTONS, @@ -29,7 +31,14 @@ export default class ButtonOptions extends NavigationComponent { topBar: { testID: TOP_BAR, title: { - text: 'Buttons', + component: { + name: Screens.ReactTitleView, + alignment: 'fill', + passProps: { + text: 'Buttons', + clickable: false, + }, + }, }, rightButtons: [ { @@ -78,10 +87,42 @@ export default class ButtonOptions extends NavigationComponent { testID={CHANGE_BUTTON_PROPS} onPress={this.changeButtonProps} /> +