Пользовательский макет и гравитация TextView (горизонтальная гравитация работает, но вертикальная не работает)

Мы столкнулись с проблемой со следующим View. Гравитация TextView должна центрировать текст по горизонтали и вертикали, но текст просто центрирован по горизонтали и застревает вверху. Что случилось?

public class TestLayout extends ViewGroup {
    private TextView textView;

    public TestLayout(Context context, AttributeSet attrs) {
        super(context, attrs);

        textView = new TextView(context);
        textView.setText("Hello world.");
        textView.setGravity(Gravity.CENTER);
        addView(textView);
    }
    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        textView.layout(0, 0, r - l, b - t);
    }   
}

person mazatwork    schedule 03.06.2013    source источник


Ответы (1)


Мы нашли решение. Нам нужно вызвать measure() для дочерних элементов макета.

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    textView.measure(widthMeasureSpec, heightMeasureSpec);
}
person mazatwork    schedule 04.06.2013
comment
Будьте здоровы!! - person datWooWoo; 08.03.2018