我目前正在扩展SlidingDrawer类,并希望调整内容的宽度,并且无法使其正常工作。现在我正在设置整个视图的宽度(句柄和内容),它适用于调整大小的目的,但是当我移动手柄时它引入了一个视觉故障,它跳转到新大小一瞬间然后返回到句柄位置。我认为问题源于基础SlidingDrawer中发生的onMeasure()
或onLayout()
调用,这些调用阻止调整内容区域的大小但不完全确定。
我正在使用getLayoutParams().width = newWidth;
调整整个视图的大小,但希望使用类似mContent.getLayoutParams().width = newWidth;
的内容。
onMeasure()
的源代码为here,onLayout()
here的源代码。
任何有关内容区域无法调整大小的原因都会很棒。谢谢!
答案 0 :(得分:0)
所以我终于弄明白,如果其他人对此有任何疑问。基本上,当您想要调整布局大小时,需要在大小更改后measure()
布局。如果没有offsetLeftAndRight()
调用,句柄将“跳转”到新大小一瞬间,因此设置偏移消除了“跳转”。
我所做的简化版本主要是:
public void resize() {
int previousPosition = mHandle.getLeft();
//Set the new size of the content area
mContent.getLayoutParams().width = width;
//Measure the newly sized content area and adjust the layout
mContent.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(getBottom() - getTop(), MeasureSpec.EXACTLY));
mContent.layout(handleWidth + mTopOffset, 0, mTopOffset + handleWidth + content.getMeasuredWidth(), content.getMeasuredHeight());
/* Remeasure any other views that were resized also here */
//Not required but helps position the handle correctly
mHandle.offsetLeftAndRight(previousPosition);
}