0

我目前正在扩展 SlidingDrawer 类并且想要调整内容的宽度并且不能让它正常工作。现在我正在设置整个视图的宽度(句柄和内容),它用于调整大小的目的,但是当我移动句柄时它会在一瞬间跳转到新的大小,然后返回到句柄时也引入了视觉故障位置。我认为问题出在基础 SlidingDrawer 中发生的onMeasure()或阻止调整内容区域大小但不完全确定的调用。onLayout()

getLayoutParams().width = newWidth;用来调整整个视图的大小,但想使用类似mContent.getLayoutParams().width = newWidth;.

的源代码onMeasure()这里onLayout() 这里

任何关于为什么内容区域无法调整大小的见解都会很棒。谢谢!

4

1 回答 1

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);
}
于 2013-09-10T16:56:15.207 回答