所以我正在查看一些提升源代码,并发现了这个:
(来自<boost/checked_delete.hpp>)
template<class T> inline void checked_delete(T * x)
{
    // intentionally complex - simplification causes regressions
    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
    (void) sizeof(type_must_be_complete);
    delete x;
}
Run Code Online (Sandbox Code Playgroud)
有人碰巧知道为什么以这种方式实施它?sizeof(T)(例如)是不是已经足够了?
所以我试图以全屏方式运行我的 React Native Android 应用程序,这意味着没有状态栏,底部也没有导航栏。我已将此添加到我的 MainActivity:
protected void goFullScreen()
{
    getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
@Override
protected void onStart()
{
    this.goFullScreen();
    super.onStart();
}
Run Code Online (Sandbox Code Playgroud)
SYSTEM_UI_FLAG_IMMERSIVE_STICKY 基本上可以使您可以从屏幕的顶部或底部边缘滑动以将它们显示出来,然后它们会在一段时间后再次消失。
这很好用,直到我打开任何模态(使用 react-native-modal 包,但它基于常规的 React Native Modal 组件)。此时状态栏和导航栏都会出现。我不是 Android 开发人员,但我认为它基本上为对话框创建了一个全新的窗口/活动/任何名称,它不会继承为主要活动设置的标志。认为这是在这里发生的:
/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java
Run Code Online (Sandbox Code Playgroud)
它创建了一个新的 app.android.Dialog。
无论如何,我已经能够通过更改 style.xml 中的主题来摆脱状态栏(请参阅此处):
<style name="AppTheme" parent="Theme.ReactNative.AppCompat.Light.NoActionBar.FullScreen">
    <!-- Customize your theme here. -->
</style>
Run Code Online (Sandbox Code Playgroud)
但是,导航栏仍然存在,它在我的应用程序 UI 顶部打开,并且在我关闭对话框后甚至没有消失,所以它完全搞砸了。
任何人都知道我如何才能摆脱它?最好不修补/重建RN?
android modal-dialog fullscreen react-native react-native-android
我正在开发一个显示贸易展览会平面图的应用程序。这是高分辨率 (3500x4600) 但文件大小相当低 (400kb) 的 PNG 图像。我有一个小组件可以平移/缩放它。
现在,它在 iOS 上运行得很好,但在 Android 上我无法让它运行。如果我只是尝试将其加载到正常的 RN (0.56) 图像组件中,我会得到一个空白屏幕。我正在 HTC One M8 上进行测试,它不完全是全新的,但也不是超低端(2 GB RAM)。有趣的是,如果我将其转换为具有相同尺寸的 2.6 MB jpg,它就会显示出来,尽管质量很差,您无法阅读任何标签。
有一些关于此的大部分较旧的 github 问题(例如此处和此处),但这些解决方案 () 都不android:largeHeap="true"适合我。
我尝试使用react-native-svg,但它有同样的问题(我猜它最终会被光栅化?)。
我也尝试过使用react-native-fast-image,它在底层使用 Glide 而不是 Facebook 的 Fresco,但是(你猜对了),它也不起作用。如果我只加载图像,它将被缩小采样(比 jpg 更糟糕)。我试图让 Glide 停止这样做(使用override),但随后我又得到一个空白屏幕。
我找到了这个库,我猜它完全符合我的要求,但我必须将它包装起来以供 RN 使用……这将是一项相当大的工作。
有人有主意吗?