Как выровнять изображение?

У меня есть миниатюры, большая сторона которых составляет 70 пикселей (например, 70x40 или 52x70).

Мне нужно создать серую рамку 70x70px и поместить в нее миниатюру, чтобы изображение было выровнено с рамкой вверху по вертикали и центрировано по горизонтали.

Как это сделать?

Я пробовал с ImageView 70x70px, серый фон, но изображение не расположено должным образом (оно находится в центре по вертикали и горизонтали, а не по центру по вертикали сверху и по горизонтали).

Я также пытался обернуть его LinearLayout 70x70px, серый фон, а затем позиционировать его, но тогда я получаю линию 1 или 2px между LinearLayout и ImageView. Я попытался установить отступы и поля на 0, но серая линия остается...


person zorglub76    schedule 12.01.2010    source источник


Ответы (3)



Используйте RelativeLayout. Установите серый фон и размер 70px квадрата. Поместите ImageView в качестве дочернего элемента RelativeLayout с android:layout_alignParentTop="true" и android:layout_centerHorizontal="true".

person CommonsWare    schedule 12.01.2010
comment
Я все еще получаю линию шириной 2 пикселя между картинкой и верхней частью RelativeLayout. Вы можете увидеть, о чем я говорю здесь: img706.imageshack.us/img706/2852 /20100112144811.png - person zorglub76; 12.01.2010
comment
Без изображений и макетов я мало чем могу помочь. Убедитесь, что в верхней части изображения нет прозрачного сегмента, что вы не применяете отступы или поля к ImageView и т. д. - person CommonsWare; 12.01.2010
comment
Хорошо, макет, над которым я работаю, — это элемент списка. Вы можете увидеть XML-файл здесь: pastebin.com/m239fa5c и скриншот полученного макета здесь: img706.imageshack.us/img706/2852/20100112144811.png - person zorglub76; 12.01.2010
comment
Убедитесь, что при раздувании строки вы используете inflate(R.layout.whatever, parent, false). - person CommonsWare; 12.01.2010
comment
У меня convertView = inflater.inflate(R.layout.result_list_row, ResultListActivity.this.getListView(), false); но результат тот же... - person zorglub76; 12.01.2010
comment
Ваш второй параметр должен быть параметром parent, переданным в getView() (или newView(), в зависимости от того, какой адаптер вы используете). Я думаю, что это будет то же самое, что и у вас, но я рекомендую внести изменения, чтобы быть уверенным. Сделайте это неправильно, и RelativeLayout станет капризным. Кроме этого, у меня нет предложений. - person CommonsWare; 12.01.2010
comment
..и снова то же самое (при использовании parent вместо getListView()).. Хорошо, я попытаюсь воспроизвести это поведение в чистом новом проекте, а затем зарегистрировать его как ошибку. Если мне удастся воспроизвести это, то есть.. - person zorglub76; 13.01.2010
comment
Я сообщил об этом здесь: code.google.com/p/android/issues. /detail?id=6020 К заявленной проблеме также приложен проект (если хотите поиграть с ним) - person zorglub76; 13.01.2010

Черт!!

Конечно, это было так просто: нужно было просто добавить android:scaleType="fitStart" в ImageView — все эти макеты не нужны.

person zorglub76    schedule 13.01.2010
comment
На самом деле - не работает. fitStart выравнивает изображение по левому верхнему углу. Но я сдался. Во всяком случае, с выравниванием по центру выглядит лучше... - person zorglub76; 27.01.2010