ImageButton в Android - PullRequest
       10

ImageButton в Android

22 голосов
/ 23 июля 2010

Может кто-нибудь сказать мне, как изменить размер 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>

Ответы [ 9 ]

31 голосов
/ 21 марта 2011
android:background="@drawable/eye"

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

android:src="@drawable/eye"

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

12 голосов
/ 23 июля 2010

вы устанавливаете изображение с помощью свойства "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 голосов
/ 20 сентября 2010

Вроде поздно, но я все за «лучше поздно, чем никогда». У меня сегодня был тот же вопрос, который я нашел здесь объясненным: http://www.anddev.org/tutorial_buttons_with_niceley_stretched_background-t4369.html

3 голосов
/ 23 июля 2010

Возможно, вам придется изменить размер кнопки программно. Вам нужно явно загрузить изображение в свой метод 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 (поскольку ширина и высота по-прежнему зависят от родительского представления), но она должна работать довольно хорошо практически для любой ситуации.

2 голосов
/ 23 октября 2013

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

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

android:src="@drawable/myimage"

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

<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

Это также поможет вам в создании вашей скиновой кнопки с 4 состояниями: нажато, нормально, отключено и фокусировано. Убедитесь, что все размеры pngs

одинаковы
2 голосов
/ 30 июня 2011

Вы пытались задать 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>
2 голосов
/ 01 июня 2011

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

Типы ScaleTypes неправильно отображаются в Eclipse Layout Designer, так что тестируйте в своем работающем приложении.

1 голос
/ 23 мая 2012

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

 <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" />
0 голосов
/ 17 октября 2012

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

android:background="@drawable/eye"

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

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

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

...