React本机UI组件doen';t调整大小(Android)
我对React Native在Android本机UI组件的高度方面存在问题。我创建了一个非常简单的用例来演示这个问题 React本机版本=0.61.5 Android,反应本机ViewManager: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(
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()
}