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

Другие вопросы по тегам