2017-01-30 10 views
1

Как я могу получить ImageButton, который имеет фиксированную высоту и является настолько широким, насколько это необходимо, в соответствии с отношением исходного изображения?Удалить простыню ImageButton

Я попытался следующие:

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="8pt" 
    android:minWidth="0pt" 
    android:scaleType="fitCenter" 
    android:adjustViewBounds="true" 
    android:src="@drawable/list_download" 
    android:background="@android:color/black" 
    android:padding="0pt"/> 

Я установил черный фон просто увидеть границы него точно, и here является результатом.

Я видел некоторые решения, предлагающие использовать отрицательные прокладки, но это не изящное решение. Должен быть лучший.

Я также пробовал аналогичные конфигурации на ImageView, но у него также была дополнительная обивка. Так что это не проблема ImageButton (т. Е. Она не связана с проблемой 9-патча this).

EDIT: Если я изменяю scaleType от fitCenter до fitStart, то результат, как this. Таким образом, есть какая-то минимальная ширина.

+0

Вы имеете в виду левую и правую прокладку? –

+0

@Rod_Algonquin да. Для 'fitCenter', слева и справа. Для 'fitStart', только правильно. – ram

+0

Это можно устранить, используя вместо этого векторное xml-изображение, где вы можете указать ширину/высоту изображения внутри xml (так просто), также вам не нужно масштабировать его, поскольку вектор уже масштабируется. –

ответ

0

вы можете поместить его в рамку так:

<FrameLayout 
    android:layout_width="wrap_content" 
    android:background="@android:color/black" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:src="@drawable/list_download" 
     android:scaleType="fitCenter" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_width="8dp"/> 
</FrameLayout> 

будет гораздо легче играть с ним, как так

+0

Это не решает проблему дополнительного заполнения. Даже если я установил дополнение к нулю как на «FrameLayout», так и на «ImageView», у меня все еще есть отступы. – ram

1

Это потому, что вы установили ограниченную высоту. Это ограничивает высоту изображения, но когда Android вычисляет ширину содержимого (оригинальное неразмеченное изображение), оно шире.

Вы получите изображение без черной «прокладки» на стороне, если вы также используете wrap_content для высоты.

<ImageButton 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:minWidth="0pt" 
android:scaleType="fitCenter" 
android:adjustViewBounds="true" 
android:src="@drawable/list_download" 
android:background="@android:color/black" 
android:padding="0pt"/> 

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

+0

Как я писал в комментариях к вопросу, я хочу установить только одно измерение (ширину или высоту) и дать андроиду вычислить другой. Как вы сказали, кнопка более широкая, чем изображение. Зачем? Его ширина 'wrap_content', так почему она шире изображения? Это моя проблема. – ram

+0

Я не видел комментарий перед опубликованным, извините. Кнопка изображения становится шире, чем изображение, отображаемое на экране, но оно имеет _ фактическую ширину_оригинального drawable/image_. Это твоя проблема. Я не знаю способа масштабирования изображения так, как вы хотите, когда вы просто указываете статическую высоту или ширину. Но я уверен, что это возможно. Вы всегда можете сделать это в своем коде (вместо макета). – larseknu

+0

«... но он имеет точную ширину исходного изображения/изображения». К сожалению, это неправильно, хотя я и ожидал этого. Он шире, чем подразумевает 'wrap_content'. (Как замечание стороны, само изображение не содержит дополнительного дополнения, как видно в случае «fitStart».) – ram