2012-04-25 2 views
0

Я пишу композиционный вид на перекрытом ViewGroup, например, так:Android Composite View Initialization

public class CompositeView extends RelativeLayout 

Мне нужно выполнить некоторую инициализацию одноразовой после измерения было установлено (т.е. onMeasure был назван), потому что мне нужно знать высоту.

Я думал о наиважнейшей onAttachedToWindow, но документы упоминают, что:

можно назвать любое время до первого OnDraw - в том числе до или после onMeasure (Int, Int).

Какие еще варианты у меня есть?

Благодаря

ответ

1

Я предпочитаю использовать onSizeChanged в моих CustomViews:

@Override 
protected void onSizeChanged(final int w, final int h, final int oldw, final int oldh) { 
    boolean changed = false; 
    changed |= w != oldw; 
    changed |= h != oldh; 
    changed &= w > 0; 
    changed &= h > 0; 
    if (changed) { 
      //do initialization stuff here 
      ... 

Этот метод вызывается один раз после завершения Оформление печатных изданий. Это questions дает дополнительные сведения.

+0

Это обязательно будет называться один раз? – Steve

+0

его вызывается один раз, как только определяется размер представления. Я отредактировал мой anser, чтобы отразить это. – Renard

+0

Спасибо. Я никогда не знал, что побитовые операторы могут применяться к булевым. Узнал что-то новое. – Steve