средство просмотра иерархии отображает изменения высоты
это мой первый вопрос
Я построил пользовательский компонент:RelativeLayout
сTextView
на дне и дваImageView
выше, действуя как кликабельный элемент из 2 столбцов гистограммы. Чтобы установить высоту бара, я получаю «доступную высоту» в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» из инструментаизменения отображаются (на эмуляторе) !! Что просходит? Это странно? Я хочу сделать это в своем коде, чтобы он работал!
Я не мог найти подобный вопрос. Благодарю.