gpt4 book ai didi

android - 无法在android react native模块中调整线性布局子项的大小

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:10 26 4
gpt4 key购买 nike

Full code here

Video of correct behavior in java and incorrect in react native here

我修改了一个线性布局,通过调整左子节点的大小来响应触摸,而右子节点占据剩余的空间,模拟一个可以使用以下代码“打开”或“关闭”的水平滚动

    LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) leftView.getLayoutParams();
//Log.d("ll","width " + newWidth);
lp.width=newWidth;
leftView.setLayoutParams(lp);

在 React Native 中,touch 仍在调用此方法并记录预期值,但未更新子项的大小。它唯一更新的时间是当我将可见性切换为消失然后再次可见时。从 java 调用 View 上的 invalidate/requestLayout 或从 js 调用 forceUpdate 没有任何效果。

是否需要调用一些其他代码来使 View 无效并重绘?是否有提示我需要给出该组件滚动或响应触摸的 react ?

最佳答案

我遇到了同样的问题,我在 this 上找到了答案关于 React Native 的 repo 的旧报告问题。

在您的自定义布局中添加以下代码,之后甚至不需要调用 requestLayout() 或 invalidate()。一旦您更新布局的 LayoutParams,更改就会传播。此解决方案与 ReactPicker.java 中使用的解决方案相同和 ReactToolbar.java .

@Override
public void requestLayout() {
super.requestLayout();

// The spinner relies on a measure + layout pass happening after it calls requestLayout().
// Without this, the widget never actually changes the selection and doesn't call the
// appropriate listeners. Since we override onLayout in our ViewGroups, a layout pass never
// happens after a call to requestLayout, so we simulate one here.
post(measureAndLayout);
}

private final Runnable measureAndLayout = new Runnable() {
@Override
public void run() {
measure(
MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));
layout(getLeft(), getTop(), getRight(), getBottom());
}
};

关于android - 无法在android react native模块中调整线性布局子项的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38934776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com