#android #android-layout #height #gallery
#Android #android-макет #высота #Галерея
Вопрос:
У меня есть, layout
где Gallery
height
находится WRAP_CONTENT (width is FILL_PARENT)
с нижним полем 80dp
. Это оставило бы 80dp
в нижней части экрана для чего-то другого.
Проблема в том, как я могу точно узнать, сколько пикселей у меня есть в height
этом Gallery
?
Мне это нужно для того, чтобы установить размер bitmap
в галерее getView
(поскольку я хочу, чтобы каждое изображение занимало весь экран галереи), различные устройства должны давать мне разные пиксели высоты…
По-видимому, когда я запрашиваю Gallery.getHeight
, он возвращает ноль.
Кроме того, если само изображение меньше, чем порт просмотра галереи, я хочу увеличить его. Однако setScaleType(FIT_CENTER)
кажется, что масштабируется только вниз (если изображение больше, чем область просмотра), но не увеличивается? Я что-то упускаю?
Заранее спасибо за вашу помощь.
Ответ №1:
Gallery
это просто еще один View
, поэтому любой метод, определенный для View
, будет работать. Используйте myGalery.getHeight();
С View
справочной страницы API: http://developer.android.com/reference/android/view/View.html
Размер, отступы и поля
Размер вида выражается шириной и высотой. Представление фактически содержит две пары значений ширины и высоты.
Первая пара известна как измеренная ширина и измеренная высота. Эти размеры определяют, насколько большим должно быть представление в пределах его родительского элемента (подробнее см. Макет).) Измеренные размеры могут быть получены путем вызова getMeasuredWidth() и getMeasuredHeight().
Вторая пара известна просто как ширина и высота, или иногда ширина рисунка и высота рисунка. Эти размеры определяют фактический размер вида на экране, во время рисования и после верстки. Эти значения могут, но не обязательно, отличаться от измеренных ширины и высоты. Ширину и высоту можно получить, вызвав getWidth() и getHeight().
Чтобы измерить его размеры, представление учитывает его заполнение. Заполнение выражается в пикселях для левой, верхней, правой и нижней частей представления. Заполнение может использоваться для смещения содержимого просмотра на определенное количество пикселей. Например, отступ слева, равный 2, приведет к смещению содержимого просмотра на 2 пикселя вправо от левого края. Заполнение может быть задано с помощью метода setPadding(int, int, int, int) и запрошено с помощью getPaddingLeft(), getPaddingTop(), getPaddingRight() и getPaddingBottom().
Обновить
Будьте осторожны при его измерении. Если вы используете его в конструкторе, он вернет ноль, поскольку он еще не был отрисован. Если вы не абсолютно уверены, что GridView
будет видно к моменту его измерения, вы можете измерить, добавив View.OnLayoutChangeListener
и внедрив
public abstract void onLayoutChange (View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom)
http://developer.android.com/reference/android/view/View .OnLayoutChangeListener.html
или переопределение protected void onSizeChanged (int w, int h, int oldw, int oldh)
Комментарии:
1. Вероятно, так и было, поскольку представление просто раздулось, когда я измерил эти цифры и по праву вернул ноль. Это ситуация с курицей и яйцом, поскольку мне нужно было отправить пиксельные данные для правильного размера. Тем не менее, я вроде как решил это, изменив формат XML, чтобы использовать FILL_PARENT для высоты галереи. По-видимому, он вычисляется во время компиляции, и теперь я могу последовательно получать необходимые 605 (и правильно использовать их в других эмуляторах с меньшим экраном) Еще раз спасибо за вашу помощь!
Ответ №2:
вы можете получить общую высоту и удалить из нее 80 пикселей, т. Е. (высота вашей галереи) получить общую высоту с помощью этого кода
Display display;
display = activity.getWindowManager().getDefaultDisplay();
display.getHeight()
Комментарии:
1. Есть ли какой-либо способ выполнить dp-арифметику? Для экранов с меньшим разрешением 80dp не соответствует 80px…
2. en.wikipedia.org/wiki/List_of_common_resolutions может помочь dis или DisplayMetrics displaymetrics = new DisplayMetrics(); wn=(WindowManager) context.getSystemService (Контекст. WINDOW_SERVICE); act.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);