средство просмотра иерархии отображает изменения высоты - PullRequest
0 голосов
/ 11 ноября 2010

это мой первый вопрос.

Я создал пользовательский компонент: RelativeLayout с TextView внизу и двумя ImageView над ним, действуя как кликабельный элемент гистограммы с двумя столбцами. Чтобы установить высоту бара, я получаю «доступную высоту» в onLayout(), как высоту контейнера минус единица метки:

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    super.onLayout(changed, l, t, r, b);
    mAvailHeight = getHeight()-findViewById(R.id.label).getHeight(); // it works

, а затем назначьте его (умноженное на значение 0-1.) В качестве параметра макета для ImageView:

    View bar = findViewById(R.id.bigBar);
    RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) bar.getLayoutParams();
    rlp.height = Math.round((float)mAvailHeight * mBigBarHeight);
}

Переменная mBigBarHeight (0.-1.) Может быть установлена ​​с помощью этой функции:

public void setBigBarHeight(float value, float max) {
    mBigBarHeight = value / max;    
    requestLayout(); //
    invalidate();    // do these help? i find no difference
}

Теперь. Когда я добавляю один из этих «HistogramBar» в onCreate() и устанавливаю высоты и маркирую, все работает, как я ожидаю. Если я попытаюсь изменить их позже, скажем onClickSomething:

bar.setBigBarHeight(25, 100);
bar.setSmallBarHeight(50, 100);
bar.setLabel("jjk");

меняется только метка. Я проверил с помощью Hierarchy Viewer, и фактически LayoutParams изменился. Если я нажму еще раз, появятся изменения.

Самое смешное, что , даже если я выполняю «Load View Hierarchy» из инструмента , изменения отображаются (на эмуляторе) !! Что просходит? Это странно? Я хочу сделать это в своем коде, чтобы он работал!

Я не смог найти ни одного подобного вопроса. Спасибо.

1 Ответ

1 голос
/ 11 ноября 2010

Когда вы загружаете иерархию из инструмента, происходит ретрансляция / перерисовка для измерения производительности. Вероятно, вы не вызываете requestLayout (), когда должны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...