172 votes

Ajuster l'image dans ImageButton sous Android

J'ai 6 ImageButton dans mon activité, j'y place les images par le biais de mon code (sans utiliser le xml).

Je veux qu'ils couvrent 75% de la surface du bouton. Mais si certaines images couvrent moins de surface, d'autres sont trop grandes pour tenir dans le bouton imageButton. Comment les redimensionner et les afficher par programme ? Voici la capture d'écran

enter image description here Voici le fichier xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"     >
   <LinearLayout
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal">
        <ImageButton          

            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:id="@+id/button_topleft"
        android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"
            />
        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:id="@+id/button_topright"
    android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal">

        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:id="@+id/button_repeat"
    android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"     
             />

              <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:id="@+id/button_next"
    android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"     
             />

    </LinearLayout>    
   <LinearLayout
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal">

        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:id="@+id/button_bottomleft"
    android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"                                 
             />
        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:id="@+id/button_bottomright"
    android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"                  
            />        
    </LinearLayout>        

</LinearLayout>

et un extrait de maClass.java :

public void addImageButtons()
    {
        iB_topleft = (ImageButton) findViewById(R.id.button_topleft);
        iB_topright = (ImageButton) findViewById(R.id.button_topright);
        iB_bottomleft = (ImageButton) findViewById(R.id.button_bottomleft);
        iB_bottomright = (ImageButton) findViewById(R.id.button_bottomright);
        iB_next = (ImageButton) findViewById(R.id.button_next);
        iB_repeat = (ImageButton) findViewById(R.id.button_repeat);
    }

    public void setImageNextAndRepeat()
    {

    iB_topleft .setImageResource(R.drawable.aa);
        iB_topright.setImageResource(R.drawable.bb);   

    iB_bottomleft.setImageResource(R.drawable.cc);
        iB_bottomright.setImageResource(R.drawable.dd);   

        iB_next.setImageResource(R.drawable.next);
        iB_repeat.setImageResource(R.drawable.repeat);      
    }

441voto

Steven Byle Points 4888

Je veux qu'ils couvrent 75% de la surface du bouton.

Utilice android:padding="20dp" (ajustez le padding si nécessaire) pour contrôler la place occupée par l'image sur le bouton.

mais alors que certaines images couvrent moins de surface, d'autres sont trop grandes pour tenir dans le bouton image. Comment les redimensionner et les afficher par programme ?

Utilisez un android:scaleType="fitCenter" pour qu'Android mette les images à l'échelle, et android:adjustViewBounds="true" pour qu'ils ajustent leurs limites en raison de la mise à l'échelle.

Tous ces attributs peuvent être configurés dans le code sur chaque site Web. ImageButton au moment de l'exécution. Cependant, à mon avis, il est beaucoup plus facile de définir et de prévisualiser en xml.

Aussi, no utiliser sp pour toute autre chose que la taille du texte, il est mis à l'échelle en fonction de la préférence de taille du texte définie par l'utilisateur, de sorte que vos sp Les dimensions seront plus grandes que celles prévues si l'utilisateur dispose d'un paramètre de texte "grand". Utilisez dp car il n'est pas mis à l'échelle en fonction de la préférence de l'utilisateur en matière de taille de texte.

Voici un extrait de ce à quoi chaque bouton devrait ressembler :

    <ImageButton
        android:id="@+id/button_topleft"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="0dp"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:padding="20dp"
        android:scaleType="fitCenter" />

Sample Button

37voto

Pratibha Sarode Points 1012

J'utilise le code suivant dans xml

android:adjustViewBounds="true"
android:scaleType="centerInside"

10voto

Swap-IOS-Android Points 1228

Essayez d'utiliser android:scaleType="fitXY" dans i-Imagebutton xml

8voto

Seraphim's Points 2393

J'utilise android:scaleType="fitCenter" avec satisfaction.

4voto

Dinh Nhat Points 171

Consultez le lien ci-dessous et essayez de trouver ce que vous voulez vraiment :

ImageView.ScaleType CENTER Centre l'image dans la vue, mais effectue aucune mise à l'échelle.

ImageView.ScaleType CENTER_CROP Met l'image à l'échelle de manière uniforme (en maintenant rapport d'aspect de l'image) de sorte que les deux dimensions (largeur et hauteur) de l'image soient égales ou supérieures à la dimension correspondante de la vue (" imageView "). correspondante de la vue (moins le remplissage).

ImageView.ScaleType CENTER_INSIDE Met l'image à l'échelle de manière uniforme (en conservant rapport d'aspect de l'image) de sorte que les deux dimensions (largeur et hauteur) de l'image soient inférieures ou égales à la dimension correspondante de la vue de la vue (moins le remplissage).

ImageView.ScaleType FIT_CENTER Mettre l'image à l'échelle en utilisant CENTER.

ImageView.ScaleType FIT_END Mettre à l'échelle l'image en utilisant END.

ImageView.ScaleType FIT_START Mettre à l'échelle l'image en utilisant START.

ImageView.ScaleType FIT_XY Mettre l'image à l'échelle en utilisant FILL.

ImageView.ScaleType MATRIX Échelle utilisant la matrice de l'image lors du dessin.

https://developer.Android.com/reference/Android/widget/ImageView.ScaleType.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X