Comment puis-je réduire le drawable sur un bouton?
comment puis-je faire le drawable sur un bouton plus petit? L'icône est trop grande, en fait plus élevé que le bouton. C'est le code, je suis en utilisant:
<Button
android:background="@drawable/red_button"
android:drawableLeft="@drawable/s_vit"
android:id="@+id/ButtonTest"
android:gravity="left|center_vertical"
android:text="S-SERIES CALCULATOR"
android:textColor="@android:color/white"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"
android:drawablePadding="10dp">
</Button>
La partie supérieure est comment il devrait ressembler, moins à quoi il ressemble maintenant.
J'ai essayé cela, mais il n'y a aucune image affichée. 🙁
Resources res = getResources();
ScaleDrawable sd = new ScaleDrawable(res.getDrawable(R.drawable.s_vit), 0, 10f, 10f);
Button btn = (Button) findViewById(R.id.ButtonTest);
btn.setCompoundDrawables(sd.getDrawable(), null, null, null);
- Il serait mieux si vous téléchargez une image de ce que vous obtenez et ce que vous essayez de faire. Merci.
- Exemple d'image ajoutée...
- Vous pouvez définir votre bouton personnalisé afin de définir la taille d'un drawable. Voir ma réponse ici stackoverflow.com/a/31916731/2308720
- Je sais que c'est à partir de 2011... mais je préfère le look du bouton avec l'appareil-photo de briser les limites de la touche - j'aurais laissé la façon dont il a été... just sayin' 🙂
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser un ImageButton et spécifier l'image dans
android:src
, et de définirandroid:scaletype
àfitXY
Réglage de l'échelle drawable dans le code
drawable.setBounds(0, 0, drawable.getIntrinsicWidth()*0.5, drawable.getIntrinsicHeight()*0.5);
setBounds
.sd.getDrawable()
renvoie l'image d'origine.setCompoundDrawablesWithIntrinsicBounds
ousetCompoundDrawables
J'ai trouvé un très simple et efficace XML solution qui ne nécessite pas
ImageButton
Faire un drawable fichier de votre image comme ci-dessous et l'utiliser pour
android:drawableLeft
Vous pouvez définir la taille de l'image avec
android:width
etandroid:height
propriétés.Cette façon, vous pourriez au moins avoir la même taille pour les différents écrans.
L'inconvénient est qu'il n'est pas exactement comme fitXY qui sera mise à l'échelle de l'image en largeur pour s'adapter à X et à l'échelle de la hauteur de l'image en conséquence.
android:drawableTop
j'ai ajouté la nouvelle drawable. N'importe quelles valeurs pour la largeur et/ou hauteur j'ai mis, il me montre celui par défaut.Boutons de ne pas redimensionner l'intérieur des images.
Ma solution ne nécessite pas de code de la manipulation.
Il utilise une mise en page avec TextView et ImageView.
L'arrière-plan de la mise en page doit avoir le rouge 3d drawable.
Vous devrez peut-être définir la android:scaleType attribut xml.
Exemple:
BTW:
Bonne chance
Utiliser un ScaleDrawable comme Abhinav suggéré.
Le problème est que le drawable ne pas montrer alors - c'est une sorte de bug dans ScaleDrawables. vous aurez besoin de changer le "niveau" de la programmation. Cela devrait fonctionner pour chaque bouton:
Mon DiplayScaleHelper, qui fonctionne parfaitement:
Vous pouvez appeler
setBounds
sur le "compound" un drawable pour modifier la taille de l'image.Essayer ce code pour un redimensionnement automatique de la drawable de votre bouton:
défini par cette fonction:
Être conscient que cela ne peut pas être appelé dans
onCreate()
d'une activité, parce que le bouton de la hauteur et la largeur sont pas (encore) là. Appelez cela à suronWindowFocusChanged()
ou de l'utilisation cette solution pour appeler la fonction.Édité:
La première incarnation de cette fonction ne fonctionne pas correctement. Il a utilisé userSeven7s code à l'échelle de l'image, mais le retour
ScaleDrawable.getDrawable()
ne semble pas fonctionner (ni le retourScaleDrawable
) pour moi.Le code modifié utilise
setBounds
de fournir les limites de l'image. Android s'adapte à l'image de ces limites.onCreate()
.Si vous souhaitez utiliser 1 de l'image et de l'afficher en taille différente, vous pouvez utiliser l'échelle drawable ( http://developer.android.com/guide/topics/resources/drawable-resource.html#Scale ).
Vous pouvez utiliser différentes de la taille d'un drawable qui sont utilisés avec des écrans différents densités/tailles, etc. afin que votre image ressemble à droite sur tous les appareils.
Voir ici: http://developer.android.com/guide/practices/screens_support.html#support
Avez-vous essayé d'emballage de votre image dans un ScaleDrawable et ensuite l'utiliser dans votre bouton?
ScaleDrawable
serait parfait, mais il n'a tout simplement pas de travail. Il semble avoir quelque chose à voir avec les "niveaux". Plus d'informations ici (et quelques solutions qui sont moins que parfait): stackoverflow.com/questions/5507539/...Voici la fonction que j'ai créé pour la mise à l'échelle de vecteur d'un drawable. Je l'ai utilisé pour le réglage de TextView composé drawable.
À l'aide de "LOT DRAWABLE IMPORTER" fonctionnalité, vous pouvez importer taille personnalisée en fonction de votre exigence exemple 20dp*20dp
Maintenant, après l'importation d'utiliser l'importés drawable_image comme drawable_source pour votre bouton
Il est plus simple de cette façon
C'est parce que vous n'avez pas
setLevel
. après voussetLevel(1)
, il sera affiché comme tu veuxJ'ai fait un bouton personnalisé de classe pour atteindre cet objectif.
CustomButton.java
attrs.xml
Utilisation de xml
Je suis en train de faire comme ci-dessous. Cela crée un 100x100 taille de l'image dans le bouton indépendant de l'image d'entrée.
Pas à l'aide de
ScaleDrawable
soit. Pas à l'aide debutton.setCompoundDrawablesRelativeWithIntrinsicBounds()
résolu mon problème, comme cela semble utiliser des limites intrinsèques (taille de l'image source) plutôt que les limites que vous venez de définir.J'ai essayé les techniques de ce post, mais didnot trouver de si attrayant. Ma solution a été d'utiliser une imageview et textview et aligner l'imageview haut et en bas pour le textview. De cette façon, j'ai obtenu le résultat souhaité. Voici un code: