动态更改SlidingDrawer内容宽度

时间:2013-09-06 18:04:56

标签: android slidingdrawer

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

我正在使用getLayoutParams().width = newWidth;调整整个视图的大小,但希望使用类似mContent.getLayoutParams().width = newWidth;的内容。

onMeasure()的源代码为hereonLayout() here的源代码。

任何有关内容区域无法调整大小的原因都会很棒。谢谢!

1 个答案:

答案 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);
}