ReactRootView в Native Layout отображает 0 высоту при втором запуске - PullRequest
0 голосов
/ 28 ноября 2018

Я создаю гибридное приложение ReactNative, запускаю настраиваемую ReactNativeActivity с ReactRootView, добавленным в нативный макет.

Это отлично работает при первом запуске действия (см. Первый снимок экрана), но во второй раз, когда я запускаю действие (после нажатия кнопки «Назад», чтобы уничтожить действие), ReactRootView имеет высоту около 10 пикселей.

Почему это так?Что я могу сделать, чтобы у рендера была правильная высота во второй раз?

Вот код из моей пользовательской ReactNativeActivity:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle properties = new Bundle();
    Intent intent = this.getIntent();
    if (intent != null) {
        properties = intent.getExtras();
    }
    mReactRootView = new ReactRootView(this);
    mReactInstanceManager = ReactInstanceManager.builder()
            .setApplication(getApplication())
            .setBundleAssetName("index.android.bundle")
            .setJSMainModulePath("index")
            .addPackage(new MainReactPackage())
            .setUseDeveloperSupport(BuildConfig.DEBUG)
            .setInitialLifecycleState(LifecycleState.RESUMED)
            .build();
    mReactRootView.startReactApplication(mReactInstanceManager, "CommutybleMobile", properties);
    setContentView(R.layout.layout_react);
    LinearLayout mainLayout = findViewById(R.id.overallLayout);
    mainLayout.addView(mReactRootView);    
 }

Вот мой макет:

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:gravity="start"
     android:id="@+id/overallLayout"
     android:orientation="vertical">
 </LinearLayout>

Визуализация после первого запуска действия:

good render

Визуализация после возврата назад и запуска второго действия:

bad render

1 Ответ

0 голосов
/ 30 ноября 2018

Я почти уверен, что это не самый лучший ответ , но мне удалось это исправить, добавив следующий хак:

// Directly adding the react root view here (then changing to an embedded view) fixes a
// problem where the root view did not fill the space in the layout
setContentView(mReactRootView);
setContentView(R.layout.layout_react);
LinearLayout mainLayout = findViewById(R.id.mainLayout);
mainLayout.addView(mReactRootView);

Сначала установив представление содержимого вбыть полностью ReactRootView, кажется, чтобы заставить макет на полную высоту экрана.Поэтому, когда он затем добавляется в mainLayout, он уже накачан на разумной высоте.

Я видел упоминание об этой проблеме здесь , и были предложены некоторые решения здесь , но они были более сложными, чем мой хак выше, и казались почти такими же грязными.

Если у кого-то есть лучший ответ на этот вопрос, я хотел бы услышать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...