J'ai 6 ImageButton dans mon activité, j'y mets des images via mon code (sans utiliser de xml).
Je veux qu'ils couvrent 75% de la zone des boutons. Mais là où certaines images couvrent moins de surface, certaines sont trop grandes pour tenir dans l'imageButton. Comment les redimensionner et les afficher par programme? Ci-dessous la capture d'écran
ci-dessous est 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 myClass.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);
}
Réponses:
Utilisez
android:padding="20dp"
(ajustez le rembourrage si nécessaire) pour contrôler la taille de l'image sur le bouton.Utilisez a
android:scaleType="fitCenter"
pour qu'Android redimensionne les images etandroid:adjustViewBounds="true"
leur demande d'ajuster leurs limites en raison de la mise à l'échelle.Tous ces attributs peuvent être définis dans le code sur chacun d'eux
ImageButton
au moment de l'exécution. Cependant, il est beaucoup plus facile de définir et de prévisualiser en xml à mon avis.Aussi, ne l' utilisez pas
sp
pour autre chose que la taille du texte, elle est mise à l'échelle en fonction de la préférence de taille du texte définie par l'utilisateur, de sorte que vossp
dimensions seront plus grandes que celles prévues si l'utilisateur a un paramètre de texte «grand». À utiliser à ladp
place, car il n'est pas mis à l'échelle par la préférence de taille du texte de l'utilisateur.Voici un extrait de ce à quoi chaque bouton devrait ressembler:
la source
ImageButton
méthodes lesetScaleType(ImageView.ScaleType.CENTER)
setAdjustViewBounds(true)
font par programme.J'utilise le code suivant dans
xml
la source
Essayez d'utiliser
android:scaleType="fitXY"
dans i-Imagebutton xmlla source
J'utilise
android:scaleType="fitCenter"
avec satisfaction.la source
Reportez-vous au lien ci-dessous et essayez de trouver ce que vous voulez vraiment:
https://developer.android.com/reference/android/widget/ImageView.ScaleType.html
la source
J'ai récemment découvert par accident que puisque vous avez plus de contrôle sur un ImageView, vous pouvez définir un onclicklistener pour une image, voici un exemple de bouton d'image créé dynamiquement
la source
Cela a bien fonctionné dans mon cas. Tout d'abord, vous téléchargez une image et la renommez comme iconimage, la localise dans le dossier dessinable. Vous pouvez modifier la taille en définissant
android:layout_width
ouandroid:layout_height
. Enfin, nous avonsla source
Vous pouvez créer votre widget ImageButton comme je l'ai fait. Dans mon cas, j'avais besoin d'un widget avec une taille d'icône fixe. Commençons par les attributs personnalisés:
La classe de widget est assez simple (le point clé est les calculs de remplissage dans la méthode onLayout ):
Et enfin, vous devriez utiliser votre widget comme ceci:
la source