React本机UI组件doen';t调整大小(Android)

React本机UI组件doen';t调整大小(Android),android,react-native,react-native-android,react-native-native-ui-component,Android,React Native,React Native Android,React Native Native Ui Component,我对React Native在Android本机UI组件的高度方面存在问题。我创建了一个非常简单的用例来演示这个问题 React本机版本=0.61.5 Android,反应本机ViewManager: public class CustomTextViewManager extends SimpleViewManager<TextView> { @NonNull @Override protected TextView createViewInstance(

我对React Native在Android本机UI组件的高度方面存在问题。我创建了一个非常简单的用例来演示这个问题

React本机版本=0.61.5

Android,反应本机ViewManager:

public class CustomTextViewManager extends SimpleViewManager<TextView> {

    @NonNull
    @Override
    protected TextView createViewInstance(@NonNull ThemedReactContext reactContext) {
        return new TextView(reactContext);
    }

    @NonNull
    @Override
    public String getName() {
        return "CustomTextView";
    }

    @ReactProp(name = "text")
    public void setText(TextView view, String text) {
        view.setText(text);
    }
}
JavaScript,简单应用程序:

import React from 'react';
import CustomTextView from './CustomTextView';

const App: () => React$Node = () => {
  return (
    <CustomTextView
      text={'Some test text'}
    />
  );
};

export default App;
从“React”导入React;
从“/CustomTextView”导入CustomTextView;
常量应用程序:()=>React$Node=()=>{
返回(
);
};
导出默认应用程序;
运行此代码时,不会显示任何内容。添加style={height:100}后,视图将以提供的固定高度显示

实际上,我期望Android视图的高度会反映在React Native中。显然情况并非如此

注意:高度:“自动”不起作用。
我希望有人能告诉我我错过了什么。

我最近也遇到了同样的问题。您需要使用阴影节点来测量文本渲染后TextView的最终大小。 我找到了一篇关于这方面的好文章

如果TextView仅呈现简单文本,则可以使用ReactTextShadowNode,它是ReactNative的本机库的一部分

为此,只需覆盖ViewManager的createShadowNodeInstance方法,并返回ReactTextShadowNode的实例

    override fun createShadowNodeInstance(): ReactTextShadowNode {
        return ReactTextShadowNode(null)
    }
如果您的TextView必须渲染一些特殊的Spann,则需要编写自己的ShadowNode实现。我通过处理ReactTextShadowNode来实现这一点,并改变了mPreparedSpannableText字段的bild方式。此字段保存用于测量所需高度的跨度

你可以用那种东西

    @ReactProp(name = "text")
    fun setText(text: String?) {
        this.text = text ?: ""
        mPreparedSpannableText = useYourMethodToCreateYourSpannable()
        dirty()
    }

这篇文章很老,但我希望我的回答能帮助那些面临同样问题的人。

嗨!我想你可以在这里找到一些有用的信息:谢谢。我还没有找到那个信息。我会调查的。不幸的是,运气不好。我也在GitHub上分享了这个问题。
    @ReactProp(name = "text")
    fun setText(text: String?) {
        this.text = text ?: ""
        mPreparedSpannableText = useYourMethodToCreateYourSpannable()
        dirty()
    }