【问题标题】:Resize a layout on onLayout call在 onLayout 调用上调整布局大小
【发布时间】:2015-04-06 13:53:03
【问题描述】:

我在水平滚动视图中有一个线性布局,我想根据其内容调整填充。我正在使用水平滚动视图的 onLayout 调用。

@Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        if(null != views && views.size() > 0) {
            int paddingLeft = (getWidth()/2) - (views.get(0).getWidth()/2);
            int paddingRight = (getWidth()/2) - (views.get(views.size()-1).getWidth()/2);
            content.setPadding(getPaddingLeft() + paddingLeft, getPaddingTop(), getPaddingRight() + paddingRight, getPaddingBottom());
        }
        content.invalidate();
    }

我已经记录了所有尺寸,除了填充之外,所有尺寸似乎都是准确的。在我再次更改视图的可见性之前,内容上的填充是不可见的。如您所见,我试图使内容无效,但布局的宽度在重新绘制之前仍然没有填充。是否可以强制绘制?

【问题讨论】:

    标签: android android-linearlayout horizontalscrollview


    【解决方案1】:

    我通过在onLayout中获取填充值并在绘制它之前设置它来解决它,希望它可以帮助其他人。

     @Override
        protected void onLayout(boolean changed, int l, int t, int r, int b) {
            super.onLayout(changed, l, t, r, b);
            FLog.d("Information", "onLayout");
            if(null != views && views.size() > 0) {
                paddingLeft = (getWidth()/2) - (views.get(0).getWidth()/2);
                paddingRight = (getWidth()/2) - (views.get(views.size()-1).getWidth()/2);
                FLog.i("Information", "[paddingRight]" + paddingRight + " = " + " ([scrollView width]" + getWidth() + " / 2) " + " - " + "[viewLast width]" + views.get(views.size()-1).getWidth() + " / 2)");
                FLog.i("Information", "ContentWidth: " + content.getWidth());
                paddingInitialized = true;
            }
            content.invalidate();
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            if(!paddingSet && paddingInitialized) {
                content.setPadding(getPaddingLeft() + paddingLeft, getPaddingTop(), getPaddingRight() + paddingRight, getPaddingBottom());
                paddingSet = true;
            }
            super.onDraw(canvas);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 2011-08-31
      • 2016-07-17
      相关资源
      最近更新 更多