web-dev-qa-db-fra.com

ImageButton dans Android

Quelqu'un peut-il me dire comment redimensionner l'imageButton pour adapter l'image exactement..C'est le code que j'ai essayé, mais l'image est placée à la position que je recherche en utilisant Android:scaleType mais je ne peux pas réduire le taille de imageButton, les pls m'aident à rectifier ce problème ... Le code que j'ai essayé est ...

<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>
22
Nandagopal T

Un peu en retard, mais je me trompe tous pour 'mieux tard que jamais' J'avais la même question aujourd'hui, je l'ai trouvée expliquée ici: http://www.anddev.org/tutorial_buttons_with_niceley_stretched_background-t4369.html

4
Olivier Henny
Android:background="@drawable/eye"

fonctionne automatiquement.

Android:src="@drawable/eye"

c’était ce que j’utilisais avec tous les problèmes de redimensionnement de l’image la largeur et la hauteur du bouton ...

31
John Feagans

vous définissez l'image avec la propriété "src"

Android:src="@drawable/eye">

utilisez la propriété "background" à la place de "src":

Android:background="@drawable/eye"

comme:

<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>
11
Elenasys

Vous devrez probablement redimensionner le bouton par programme. Vous devez explicitement charger l'image dans votre méthode onCreate () et redimensionner le bouton à cet endroit: 

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());
  ...
}

Il n’est pas garanti que cela fonctionne, selon les spécifications de setMinimumX (puisque la largeur et la hauteur dépendent toujours de la vue parent), mais cela devrait fonctionner assez bien dans presque toutes les situations.

3
infinitypanda

Vous n'êtes pas obligé de l'utiliser avec l'attribut src

Mauvaise façon (l'image ne correspond pas au bouton)

Android:src="@drawable/myimage"

La bonne façon est d'utiliser l'attribut d'arrière-plan

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

skin est un 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>

using button_pressed.png et button_normal.png 

Cela vous aidera également à créer votre bouton skinné avec 4 états: pressé, normal, désactivé et concentré.

2
HimalayanCoder

Avez-vous essayé de donner les propriétés layout_width et layout_height comme suit? Puisque vous définissez avec wrap_content, le bouton image s’agrandit à la taille de la hauteur et de la largeur de l’image source.

<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
Arul

Essayez d'utiliser ScaleType centerInside. 

Les ScaleTypes ne sont pas correctement restitués dans Eclipse Layout Designer, alors testez-les dans votre application en cours d'exécution.

2
diexsie

Vous pouvez également définir l'arrière-plan est transparent. Le bouton ressemble donc à votre icône.

 <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" />
1
Kislingk

Je pense que vous avez déjà résolu ce problème, et comme d'autres réponses suggérées

Android:background="@drawable/eye"

est disponible. Mais je préfère

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

et cela fonctionne bien aussi (bien sûr, l'ancien code définira l'image en tant qu'arrière-plan et l'autre définira l'image en tant qu'image).

0
khcpietro