2015-02-27 3 views
0

Я хотел бы сделать что-то вроде следующего:Android: Могу ли я изменить высоту представления до его рисования?

rootLayout.getLayoutParams().height = 100; 

В настоящее время у меня есть эта линия в моем методе «LoadData». Проблема в том, что «layoutParams» кажется нулевым до тех пор, пока не будет вызвана «loadData» (но до того, как она будет показана явно).

Есть ли где-нибудь я могу разместить эту строку, где layoutParams будет создан, но все еще будет отображаться в первый раз?

+0

, что является классом, что эта линия находится внутри? Фрагмент? Посмотреть? Мероприятия? – Budius

+0

@Budius Это внутри вида. Код имеет подкласс FrameLayout. –

ответ

0

Вы должны рассмотреть, чтобы установить layoutParams этой точки зрения, как

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 100)); 
rootLayout.setLayoutParams(lp); 

Так Вы можете установить layoutParams высоту в 100 и при условии, что ваш родительский вид, как linear layout, если это не так, то вы должны использовать его layoutparams

0

на документах вы можете проверить все функции обратного вызова мнения есть, что вы можете переопределить https://developer.android.com/reference/android/view/View.html

, если ваш взгляд находится внутри макета XML с LayoutParams, указанной в наличии, вы можете/должны положить гр ода внутри onFinishInflate

@Override 
    public void onFinishInflate() { 
    } 

, если вы делаете все это в программе, вы можете изменить расположение пройти

@Override 
public void onLayout (boolean changed, int left, int top, int right, int bottom){ 
    // be carefull that this get's called several times 
} 

в качестве альтернативы (а лучше подход на мой взгляд), вы можете обмануть onMeasure вашего зрения чтобы иметь нужный размер. Например, чтобы иметь представление с maxWidth

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     // apply max width 
     int measuredWidth = MeasureSpec.getSize(widthMeasureSpec); 
     if (maxWidth > 0 && maxWidth < measuredWidth) { 
     int measureMode = MeasureSpec.getMode(widthMeasureSpec); 
     widthMeasureSpec = MeasureSpec.makeMeasureSpec(maxWidth, measureMode); 
     } 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
1
rootLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
        rootLayout.getViewTreeObserver() 
          .removeOnGlobalLayoutListener(this); 
       } else { 
        rootLayout.getViewTreeObserver() 
          .removeGlobalOnLayoutListener(this); 
       } 
       rootLayout.getLayoutParams().height = 100; 
       rootLayout.requestLayout(); 
      } 
     }); 
Смежные вопросы