Android: определение размера (в зависимости от разрешения) галереи

#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);