Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在onLayout调用时调整布局大小_Android_Android Linearlayout_Horizontalscrollview - Fatal编程技术网

Android 在onLayout调用时调整布局大小

Android 在onLayout调用时调整布局大小,android,android-linearlayout,horizontalscrollview,Android,Android Linearlayout,Horizontalscrollview,我在水平滚动视图中有一个线性布局,我想根据它的内容调整填充。我正在使用水平滚动视图的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) {

我在水平滚动视图中有一个线性布局,我想根据它的内容调整填充。我正在使用水平滚动视图的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();
    }

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

我通过在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);
    }