TextView setGravity не работает (игнорируется) с ViewGroup программно
Мне нужно иметь полный контроль над макетом представления, поэтому я использую ViewGroup следующим образом:
ViewGroup wrapper = new ViewGroup(getContext()) {
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
setClipChildren(false);
for (int c = 0; c < this.getChildCount(); c++) {
View v = this.getChildAt(c);
ViewGroup.LayoutParams lp = v.getLayoutParams();
//Log.d(TAG, "layout " + c + " w:" + lp.width + " h:" + lp.height);
v.layout(0, 0, lp.width, lp.height);
}
}
};
float nextY = dipY;
for (SwipeMarkdown.Element e : markdown) {
TextView tv = new TextView(getContext());
tv.setText(e.text);
tv.setTextSize(e.fontSize);
tv.setTextColor(e.textColor);
tv.setGravity(Gravity.CENTER);// e.textAlignment);
tv.setBackgroundColor(Color.YELLOW);
tv.setX(0);
tv.setY(nextY);
tv.measure((int)dipW, (int)dipH);
int mh = tv.getMeasuredHeight();
nextY = nextY + mh + e.lineSpacing;
wrapper.addView(tv, new ViewGroup.LayoutParams((int)dipW, (int) mh));
}
wrapper.setY((dipH - nextY)/2); // center vertically in self
viewGroup.addView(wrapper, new ViewGroup.LayoutParams((int) dipW, ViewGroup.LayoutParams.WRAP_CONTENT));
}
Все работает отлично, за исключением того, что я не могу получить setGravity() для выравнивания текста.
Что мне не хватает?
Спасибо
ОБНОВЛЕНИЕ: @pskink дал мне ответ! Позвонить measure()
требует использования MeasureSpec
следующее:
tv.measure(View.MeasureSpec.makeMeasureSpec(dipW, View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(dipH, View.MeasureSpec.AT_MOST));
1 ответ
Решение
@pskink дал мне ответ! Call to measure() требует использования MeasureSpec