Изменение размера макета при вызове onLayout

У меня есть линейный макет внутри горизонтальной прокрутки, который я хочу настроить в соответствии с его содержимым. Я использую 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();
    }

Я зарегистрировал все размеры, и все они кажутся точными, кроме заполнения. Отступы в содержимом не видны, пока я снова не изменю видимость представления. Как вы можете видеть, я попытался аннулировать содержимое, но ширина макета все еще остается без отступов, прежде чем он снова будет перерисован. Можно ли заставить рисовать?


person Barışcan Kayaoğlu    schedule 06.04.2015    source источник


Ответы (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);
    }
person Barışcan Kayaoğlu    schedule 06.04.2015