gpt4 book ai didi

android - 布局宽度和高度被忽略

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:49:27 25 4
gpt4 key购买 nike

我有一个带有内部布局的对话框和一个带有视频流的 SurfaceTexture。当我从视频中收到 widthheight 时,我会像这样调整布局:

private void resizeView(final VideoFormatInfo info) {
final Size size = calculateSize(info.getWidth(), info.getHeight());
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {

final ViewGroup.LayoutParams layoutParams = mInnerLayout.getLayoutParams();
layoutParams.width = size.x;
layoutParams.height = size.y;
Log.i(TAG, String.format("run: setting innerlayout bounds to %d,%d", size.x, size.y));
mInnerLayout.setLayoutParams(layoutParams);
}
});
}

现在我有一个全屏按钮,可以将布局调整到整个屏幕。但是当我按下它时,布局会保留在屏幕的一小块区域。

当我检查日志时,size.xsize.y 的正确值在那里(屏幕的边界),但布局未正确调整大小.

内部布局被添加到名为“VideoPlayer”的自定义 View 中。我将视频播放器背景的颜色设置为红色,所以当我切换到全屏时,整个屏幕都变成红色,除了中间的视频流。这意味着底层 View 正在正确调整大小,但 innerLayout 不是出于某种原因。

有趣的是,我在视频渲染上有另一个布局,它创建了一个“闪光效果”来模拟拍摄快照时的相机闪光灯。当触发闪光效果时,视频会调整到整个屏幕。

这是我的布局树:

VideoPlayerView (CustomView, not VideoView)
innerLayout (RelativeLayout)
videoSurfaceTexture (SurfaceTextureView)
flashLayout (RelativeLayout)

我还设置了这个用于调试:

 @Override
public void onSurfaceTextureSizeChanged(final SurfaceTexture surfaceTexture, final int width, final int height) {
Log.d(TAG, "onSurfaceTextureSizeChanged size=" + width + "x" + height + ", st=" + surfaceTexture);

Log.i(TAG, String.format("innerlayout bounds are %d,%d", mInnerLayout.getLayoutParams().width, mInnerLayout.getLayoutParams().height));
}

当我按下全屏时,内部布局上的值是正确的值(整个屏幕的值),但布局没有调整大小。我可以看出布局没有调整大小,因为我将其背景颜色更改为绿色并添加了一些填充,我可以在屏幕中央看到它占用了很小的空间。

看起来好像 View 没有随着布局更改而更新。

我的想法已经用完了。我尝试了 invalidate()postInvalidate()forceLayout() 但它们不起作用。

最佳答案

您错过了 forceLayout() 的一个重要部分:

This method does not call requestLayout() or forceLayout() on the parent.

所以让父级也做一个布局:

mInnerLayout.setLayoutParams(layoutParams);
mInnerLayout.forceLayout();
mInnerLayout.getParent().requestLayout();

关于android - 布局宽度和高度被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38970918/

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