2015-04-06 4 views
0

У меня есть линейная компоновка внутри горизонтального прокрутки, которую я хочу отрегулировать отступ в соответствии с ее содержимым. Я использую onLayout вызов горизонтального scrollview.Изменить размер макета на onLayout call

@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(); 
    } 

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

ответ

0

Я решил это, получив значение padding в 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); 
    } 
Смежные вопросы