Android button image size

Настройка размера ImageButton в Android

есть ли способ сделать это? Я попытался заполнить изображение и установить ширину / высоту представления, но ни один из них не работает. Вот пример:

Я хочу, чтобы кнопка была шире, чем она высока,но она выходит наоборот.

6 ответов

просто играл, чтобы попытаться понять вашу проблему.

кажется ImageButton — составное представление с несколькими предварительно заданными значениями. Например, какое-то поле, которое нельзя переопределить с помощью XML. Если вы не можете изменить свой образ в соответствии с тем, что вы хотите, то вам лучше создать свой собственный составной вид.

вот мой пример составного представления вы можете сделать сами:

и оригинальные кнопки:

здесь мы можем видеть пользовательское изображение / композит кнопки, за которым следует сборка в ImageButton как часть SDK:

Set android:background вместо android:src чтобы установить изображение на кнопке. Это позволит настроить изображение на размер кнопки. Затем отрегулируйте прокладку после.

вы не должны использовать sp в качестве размера размера-dp следует использовать, поскольку это поможет вашему масштабу просмотра непосредственно с различной плотностью экрана и разрешениями. Посмотреть Здесь для измерений.

padding будет отталкивать другие элементы от границы вашего вида. margin будет толкать содержимое вашего вида внутрь от вашей границы (т. е. раздавит доступное пространство для вашего изображения) . Граница определяется по высоте и ширине. Без дополнительной информации я бы угадайте, что вас смущают ваши поля-удалите их и поэкспериментируйте.

также полезно для вас: android:scaleType=»fitXY» делает растяжки изображения, чтобы соответствовать как X и y-размеры, которые доступны для него. Это поможет вам увидеть холст, доступный вашему изображению. Как только вы почувствуете, что область достаточно велика для правильного масштабирования изображения, измените тип масштаба на centerInside. Посмотреть Здесь для всех типов масштаба.

Я использую minWidth и minHeight свойства, в сочетании с fitXY тип масштаба и упаковка его содержимого для модуляции формы моей кнопки.

вы хотите сделать свою кнопку «шире», так, например, распечатав кнопку 200X100 из квадратного значка, вы можете выложить ее так:

можете ли вы объяснить свой вопрос более широко, чтобы мы могли больше понять.

согласно моему пониманию, вы хотите установить высоту/ширину ImageButton. Но это не работает, не так ли? Я хочу спросить вас, что, если вы пишете какую-либо конкретную высоту/ширину, то и это не работает?

Я скопировал ваш код в свои файлы, и я изменил высоту/ширину вручную, тогда он будет работать.

пожалуйста, объясните свой вопрос.

Я закончил макет после ответа Грэма. Четыре «imageButton» фиксируют дно, ту же ширину, изменяемый размер изображения. спасибо!

Источник

Подогнать изображение в ImageButton в Android

У меня есть 6 ImageButton в моей деятельности, я устанавливаю изображения через мой код в них (не используя xml).

Я хочу, чтобы они занимали 75% площади кнопок. Но когда некоторые изображения занимают меньшую площадь, некоторые слишком велики, чтобы поместиться в кнопку imageButton. Как программно изменить размер и показать их? Ниже скриншот

ниже находится xml-файл

и фрагмент myClass.java:

Я хочу, чтобы они занимали 75% площади кнопок.

Используйте android:padding=»20dp» (при необходимости измените отступы), чтобы контролировать, сколько изображения занимает кнопка.

но когда некоторые изображения занимают меньшую площадь, некоторые слишком велики, чтобы поместиться в кнопку imageButton. Как программно изменить размер и показать их?

Используйте, android:scaleType=»fitCenter» чтобы Android масштабировал изображения, и android:adjustViewBounds=»true» чтобы они корректировали свои границы из-за масштабирования.

Читайте также:  Зайцы фпс проверка андроид

Все эти атрибуты могут быть установлены в коде на каждом ImageButton во время выполнения. Тем не менее, на мой взгляд, гораздо проще установить и просмотреть в xml.

Кроме того, не используйте sp для чего-либо, кроме размера текста, оно масштабируется в зависимости от предпочтения размера текста, которое задает пользователь, поэтому ваши sp размеры будут больше, чем предполагалось, если у пользователя есть «большой» параметр текста. Используйте dp вместо этого, поскольку он не масштабируется предпочтением размера текста пользователя.

Вот фрагмент того, как должна выглядеть каждая кнопка:

Источник

Как я могу уменьшить рисунок на кнопке?

как я могу сделать рисование на кнопке меньше? Значок слишком большой, на самом деле выше, чем кнопка. Это код, который я использую:

Верхняя — как она должна выглядеть, нижняя — как она выглядит сейчас.

Я пробовал это, но изображение не отображается. 🙁

Вы должны использовать ImageButton и указать изображение в Android:src , и установить Android:scaletype в fitXY

Настройка масштабируемой отрисовки в коде

Я нашел очень простое и эффективное решение XML, которое не требует ImageButton

Сделайте нарисованный файл для вашего изображения, как показано ниже, и используйте его для Android:drawableLeft

Вы можете установить размер изображения с помощью свойств Android:width и Android:height .

Таким образом, вы можете получить одинаковый размер для разных экранов.

Недостатком является то, что он не совсем похож на fitXY, который масштабировал бы ширину изображения, чтобы соответствовать X, и соответственно масштабировал высоту изображения.

Кнопки не меняют свои внутренние изображения.

Мое решение не требует манипулирования кодом.

Он использует макет с TextView и ImageView.

Фон макета должен быть нарисован красным 3d.

Вам может потребоваться определить атрибут Android: scaleType xml.

  1. Подсчет значков с различным разрешением может привести к непредсказуемому пользовательскому интерфейсу (значок слишком большой или слишком маленький)
  2. Текст в textview (в том числе в кнопках) не заполняет компонент. Это проблема Android, и я не знаю, как ее решить.
  3. Вы можете использовать его в качестве включения.

Мой DiplayScaleHelper, который отлично работает:

Используйте ScaleDrawable as Abhinav предложил.

Проблема в том, что рисование тогда не показывается — это какая-то ошибка в ScaleDrawables. вам нужно изменить «уровень» программно. Это должно работать для каждой кнопки:

Вы можете вызвать setBounds на «составных» чертежах, чтобы изменить размер изображения.

Попробуйте этот код для автоматического изменения размера вашей кнопки:

определяется этой функцией:

Помните, что это не может быть вызвано в onCreate() действия, потому что высота и ширина кнопки там (пока) недоступны. Вызовите это в onWindowFocusChanged() или используйте это решение для вызова функции.

Отредактировано:

Первое воплощение этой функции не работало правильно. Он использовал код userSeven7s для масштабирования изображения, но возвращение ScaleDrawable.getDrawable() похоже, не работает (и не возвращает ScaleDrawable ) для меня.

Модифицированный код использует setBounds для определения границ изображения. Android вписывает изображение в эти границы.

Если вы хотите использовать 1 изображение и отображать его в другом размере, вы можете использовать масштабируемое рисование ( http://developer.Android.com/guide/topics/resources/drawable-resource.html#Scale ).

Вы пытались обернуть ваше изображение в ScaleDrawable и затем использовать его в своей кнопке?

Читайте также:  Материалы деликатного характера телеграм андроид казахстан

Я делаю это, как показано ниже. Это создает изображение размером 100×100 в кнопке независимо от входного изображения.

Также не используется ScaleDrawable . Отсутствие button.setCompoundDrawablesRelativeWithIntrinsicBounds() решило мою проблему, так как кажется, что вместо установленных вами границ используются внутренние границы (размер исходного изображения).

Я сделал пользовательский класс кнопок для достижения этой цели.

Источник

Android – масштабирование кнопки изображения

Я пытаюсь подобрать образ внутри ImageButton для тестирования, но способ, которым работает ImageButton не так, как ожидалось.

Первоначально я сделал изображение с размером изображения 988×89 пикселей и разместил его внутри ImageButton , который находится в эмулированном экране с разрешением 7 дюймов 1024×600 пикселей. ImageButton – 988dp x 89dp , я знаю, что dp не совпадает с пикселями, но для этого разрешения я ожидал, что изображение будет достаточно масштабировать, чтобы занять большую часть ImageButton . Также я изменился на px вместо dp для тестирования, и это не имело никакого значения.

Но вместо этого ImageButton сделал изображение внутри него ОЧЕНЬ маленьким (синие линии являются границами ImageButton а зеленая линия – индикацией выравнивания по центру).

Поэтому вопрос №1: Почему ImageButton делает изображение таким большим, как это настолько мало, когда оно может заполнить большую часть экрана, даже ImageButton размер ImageButton очень широк?

Поэтому, чтобы преодолеть это, я выбрал adjustViewBounds который не имел никакого значения, что вызывает вопрос №2: Почему? Не следует ли настраивать границы представления для настройки границ обзора?

Поэтому позже я изменил scaleType на fitCenter и изображение стало:

Это тоже странно для меня, так как ImageButton имеет тот же формат изображения, что и изображение, поэтому я ожидал бы, что он будет соответствовать 100%, но он не подходит (ширина по обеим сторонам изображения равна ширине).

Поэтому позже я изменил scaleType на fitXY и я получил свой окончательный результат:

Кажется, что это ожидаемое изображение (сравнение образа fitXY с изображением fitCenter в Photoshop показывает, что образ fitCenter немного овальный, но здесь его невозможно fitCenter , что ожидается, так как ширина не соответствует Изображение по высоте).

Итак, мой общий вопрос (№ 3): Каков правильный способ подбора изображения на Android, и ожидать, что он будет иметь обычный размер на экране, и почему масштабирование настолько грязное, и я делаю это неправильно?

Я знаю, что есть проблемы с размерами экрана и dp и т. Д., Но масштабирование не ведет себя контролируемым образом, fitCenter делает изображение овальным, а fitXY слишком сильно зависит от установки правильного отношения изображения на XY, поэтому мне интересно, Я делаю что-то неправильно и как это должно быть правильно.

Это хорошая попытка, вы пытаетесь глубже проникнуть в андроидные реализации.

Ответ # 3:

Сначала предоставление точного размера, так как высота и ширина не являются хорошей практикой в ​​Android. Если вы хотите знать, почему, причина была бы просто будет пытаться сжать / развернуть изображение до указанного вами размера в параметрах высоты и ширины. Всегда wrap_content является предпочтительным параметром, так что ОС будет автоматически настраиваться в зависимости от размера экрана. Если вам нужно изменить:

Ответ # 1:

Почему ImageButton делает изображение таким большим, как это настолько мало, когда оно может заполнить большую часть экрана, даже если размер ImageButton очень широк?

Ответ аналогичен вышесказанному. Размер вашего изображения будет намного меньше, чем у Android OS, рассчитанного в зависимости от вашего упомянутого размера, с учетом разрешения устройства. Используйте сайт http://coh.io/adpi/ (или http://density.brdrck.me/ ), чтобы сделать его простым для вычисления. Всегда принимайте mdpi в качестве стандартного или базового. Предположим, что ваш размер изображения составляет 988X89 в mdpi, это будет:

Читайте также:  The quest android русификатор

Теперь, как будто вы пытаетесь просмотреть изображение 988px X 89px на экране xhdpi, где Android Os рассчитал размер изображения как 1976px X 178px, что намного больше вашего размера изображения 988px X 89px. Поэтому вы получаете небольшое изображение с большей площадью белого цвета.

Как это исправить? Просмотрите спецификации Android для поддержки различных экранов плотности. Это требует, чтобы вы создавали изображения специально для hdpi, mdpi, xhdpi и помещали их в соответствующие папки:

На активность Creat .. вы можете получить разрешение экрана … и изменить размер изображения в соответствии с экраном Widht и Height .. и установить изображение. Таким образом, ваше отношение будет одинаковым для всех типов устройств.

Для изменения размеров изображений . 1. Получить ширину и высоту экрана. 2. увеличить изображение в соответствии с разрешением экрана. 3.set Изображение для просмотра.

Вы также должны проверить, есть ли какая-либо прокладка вокруг вашего imageButton, я создал ту, которая выглядела очень похожей на использование, и хотя fitXY работал, изменение размера изображения стало очень запутанным с ошибкой. Однако я тогда понял, что вокруг всего изображения было 100p, поэтому граница была на расстоянии 100 дп на каждом краю изображения.

Источник

ImageButton (Кнопка-изображение)

Общая информация

Находится в разделе Buttons.

Компонент ImageButton представляет собой кнопку с изображением (вместо текста). По умолчанию ImageButton похож на обычную кнопку.

В режиме дизайна изображение на кнопке определяется атрибутом android:src

Можно сделать двойной щелчок, чтобы сразу установить нужное свойство.

Методы

Программно можно установить изображения через различные методы.

setImageBitmap() Используется, чтобы указать в качестве изображения существующий экземпляр класса Bitmap setImageDrawable() Используется, чтобы указать в качестве изображения существующий экземпляр класса Drawable setImageResource() Используется, чтобы указать в качестве изображения существующий идентификатор ресурса (см. пример) setImageURI() Используется, чтобы указать в качестве изображения существующий адрес типа Uri. В некоторых случаях элемент кэширует изображение и после изменения изображения по прежнему выводит старую версию. Рекомендуется использовать инструкцию setImageURI(null) для сброса кэша и повторный вызов метода с нужным Uri

Примеры

С помощью метода setImageURI() можно обратиться к ресурсу типа Drawable по его идентификатору:

Например, можно задать путь Uri:

Можно обратиться к ресурсу по его типу/имени:

В этом случае код будет следующим:

Щелчок

Как и у обычной кнопки, интерес представляет только щелчок. В нашем примере мы будем менять поочередно картинки на кнопке (нужно подготовить две картинки в папке drawable)

Теперь при каждом щелчке изображение на кнопке будет циклически переключаться между двумя картинками.

Продолжительное нажатие

Кроме обычного щелчка, в Android есть особый вид нажатия на кнопку — продолжительное нажатие. Это событие происходит, когда пользователь нажимает и удерживает кнопку в течение одной секунды. Этот тип нажатия обрабатывается независимо от обычного щелчка.

Для обработки продолжительного нажатия нужно реализовать класс View.OnLongClickListener и передать его в метод setOnLongClickListener(). Класс OnLongClickListener имеет один обязательный метод OnLongClick(). В принципе это похоже на метод OnClick(), только имеет возвращаемое значение.

Запустите проект и убедитесь, что при быстром нажатии ничего не происходит, а при более продолжительном нажатии всплывает сообщение.

Источник

Оцените статью