Получите ширину / высоту вида или ширину / высоту шрифта / другие размеры перед первым отображением - PullRequest
4 голосов
/ 21 марта 2011

Я знаю, что вычисление размера вида для размещения нахмурилось.Менеджеры макетов Android должны правильно разместить все представления.Однако есть некоторые законные случаи, когда для обеспечения подсказок следует выполнять какие-то вычисления (например, количество столбцов в GridView или изменение размера текстового представления, чтобы минимальное количество символов отображалось в строке).Для этих случаев я хотел бы получить соответствующую информацию о ширине / высоте вида или ширине / высоте шрифта и т. Д.Однако вызовы getWidth () / getHeigth () / etc никогда не возвращают действительное значение, если только представление не было отображено на дисплее, но затем уже поздно.Это сложная ситуация.Интересно, есть ли какой-то способ, которого я не нашел (API Android является большим, чтобы понять все в моем уме), который делает возможным то, что я описал выше.

Ответы [ 2 ]

7 голосов
/ 21 марта 2011

Размер представления не может быть рассчитан до тех пор, пока не будет рассчитан его родитель, но вы всегда можете форсировать это вычисление, вызвав для него measure(allowedWidth, allowedHeight).Тогда getMeasuredWidth() будет работать.

см. http://developer.android.com/reference/android/view/View.html#measure(int, int)

5 голосов
/ 22 марта 2011

Да, я проверил предложение, и оно работает!

Пример кода.

Display display = getWindowManager().getDefaultDisplay();
View s = findViewById(R.id.Screen); // Screen is a container layout
s.measure(display.getWidth(), display.getHeight());
View c = findViewById(R.id.Cell0);
Log.i(TAG, "cell width = " + String.valueOf(c.getMeasuredWidth())
  +  " height = " + String.valueOf(c.getMeasuredHeight()));

Что я не понимаю, так это то, как я это пропустил! :) Я знал все о процессе измерения, но застрял в его использовании в пользовательских видах ...

...