a***@163.com
a***@163.com
  • 发布:2022-03-29 11:48
  • 更新:2022-03-30 10:07
  • 阅读:326

关于原生组件安卓端TextView自适应高度的问题

分类:nvue

做nvue页面开发,想用原生组件实现带自定义Emoji的图文混排,Android原生端使用TextView构建,想使其自适应高度,遇到一个棘手的问题是TextView渲染出来后在js层的flex布局里无法撑开高度,类似于原生组件使用了absolute定位,尝试计算出TextView的高度然后调用Weex的updateNativeStyle手动更新原生组件的高度样式,发现偶尔能生效,偶尔不能生效,百思不得其解,不知有没有朋友遇到类似的问题,一起研究下。

Android端指定TextView布局高度为WRAP_CONTENT,然后在onLayout回调执行 updateNativeStyles
ViewGroup.LayoutParams lp = mTextView.getLayoutParams();
lp.width = ViewGroup.LayoutParams.MATCH_PARENT;
lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
mTextView.setLayoutParams(lp);
updateNativeStyles("height", mTextView.getHeight());

js层样式
《NativeText class="desc" :content="topicInfo.intro" :fontSize="30" fontColor="#777"/》
.desc {
margin-top: 32rpx;
width: 686rpx;
}

iOS端类似操作,原生计算出UILabel高度,然后调用updateLayoutStyles更新样式,可以正常撑开。
[self.labelView sizeToFit];
[self updateLayoutStyles:@{@"height": @(self.labelView.frame.size.height)}];

2022-03-29 11:48 负责人:无 分享
已邀请:
DCloud_Android_ST

DCloud_Android_ST

推荐使用 WXBridgeManager.getInstance().post 执行updateNativeStyles

  • a***@163.com (作者)

    试了下,包括postDelay 200ms,也不好用,一会儿能撑开,一会儿又撑不开

    2022-03-29 14:10

  • a***@163.com (作者)

    WXBridgeManager.getInstance().post(new Runnable() {

    @Override

    public void run() {

    WXBridgeManager.getInstance().setStyleHeight(getInstanceId(), getRef(), height);

    }

    });


    可行

    2022-03-29 14:52

该问题目前已经被锁定, 无法添加新回复