ImageButton в Android

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

<ImageButton>
android:id="@+id/Button01"
android:scaleType="fitXY" // i have tried all the values for this attr
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:cropToPadding="false"
android:paddingLeft="10dp"
android:src="@drawable/eye"> // this is the image(eye)
</ImageButton>

Ответ 2

android:background="@drawable/eye"

работает автоматически.

android:src="@drawable/eye"

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

Ответ 3

вы устанавливаете изображение с помощью свойства "src"

android:src="@drawable/eye">

используйте свойство "background" вместо свойства "src":

android:background="@drawable/eye"

как:

<ImageButton
  android:id="@+id/Button01"
  android:scaleType="fitXY" 
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:cropToPadding="false"
  android:paddingLeft="10dp"
  android:background="@drawable/eye"> // this is the image(eye)
</ImageButton>

Ответ 4

Вероятно, вам придется изменить размер кнопки программно. Вам нужно будет явно загрузить изображение в свой метод onCreate() и изменить размер кнопки там:

public void onCreate(Bundle savedInstanceState) {  
  super.onCreate(savedInstanceState);  
  setContentView(R.layout.main);  
  ImageButton myButton = (ImageButton) findViewById(R.id.button);  
  Bitmap image = BitmapFactory.decodeResource(R.drawable.eye);  
  myButton.setBitmap(image);  
  myButton.setMinimumWidth(image.getWidth());  
  myButton.setMinimumHeight(image.getHeight());
  ...
}

Не гарантируется работа в соответствии с спецификациями для setMinimumX (поскольку ширина и высота все еще зависят от родительского представления), но он должен работать очень хорошо для почти каждой ситуации.

Ответ 5

Попробуйте использовать ScaleType centerInside.

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

Ответ 6

Вы пытались указать layout_width и layout_height следующим образом? Поскольку вы устанавливаете с помощью wrap_content, кнопка изображения расширяется до размера высоты и ширины исходного изображения.

<blink>    
  <ImageButton>
    android:id="@+id/Button01"
    android:scaleType="fitXY" 
    android:layout_width="80dip"
    android:layout_height="80dip"
    android:cropToPadding="false"
    android:paddingLeft="10dp"
    android:src="@drawable/eye"> 
  </ImageButton>
</blink>

Ответ 7

Вам не нужно использовать его с помощью атрибута src

Неправильно (изображение не будет соответствовать кнопке)

android:src="@drawable/myimage"

Правильный способ - использовать background atttribute

<ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/skin" />

где skin - это xml

skin.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- <item android:drawable="@drawable/button_disabled" android:state_enabled="false"/> -->
    <item android:drawable="@drawable/button_pressed" android:state_pressed="true"/>
    <!-- <item android:drawable="@drawable/button_focused" android:state_focused="true"/> -->
    <item android:drawable="@drawable/button_normal"/>

</selector>

используя button_pressed.png и button_normal.png

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

Ответ 8

Вы также можете установить фон прозрачным. Таким образом, кнопка похожа на вашу иконку.

 <ImageButton
    android:id="@+id/Button01"
    android:scaleType="fitcenter" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:cropToPadding="false"
    android:paddingLeft="10dp"
    android:background="@android:color/transparent"
    android:src="@drawable/eye" />

Ответ 9

Я думаю, вы уже решили эту проблему, и, как говорили другие ответы

android:background="@drawable/eye"

. Но я предпочитаю

android:src="@drawable/eye"
android:background="00000000" // transparent

и он тоже хорошо работает (конечно, прежний код установит изображение в качестве фона, а другой установит изображение как изображение). Но в соответствии с вашим выбранным ответом, я думаю, вы имели в виду 9-патч.