web-dev-qa-db-fra.com

Modification de la taille de dessin à l'intérieur d'un bouton

Je veux créer un Button comme ceci:

Button Example

Voici mon code:

<Button
    Android:layout_width="80dp"
    Android:layout_height="80dp"
    Android:layout_gravity="center"
    Android:drawablePadding="10dp"
    Android:id="@+id/button"
    Android:text="Play Game"
    Android:background="@drawable/ronaldo"
    Android:drawableRight="@drawable/messi" />

Mais le messi.jpeg est trop grand et n'affiche pas le texte dans cette situation. Comment diminuer la taille de l'image pour s'adapter au bouton?

Quelqu'un peut-il m'aider à résoudre ce problème?

8
Khuong

Solution 1:

L'ajout d'un dessinable à un bouton a des fonctions très limitées. Vous ne pouvez pas modifier la taille du dessin, donc la meilleure façon de le corriger est d'ajouter un bouton avec une vue d'image à côté dans une disposition linéaire comme celle-ci:

<LinearLayout
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    Android:background="@drawable/ronaldo"
    Android:orientation="horizontal">

    <Button
        Android:id="@+id/button"
        Android:layout_width="wrap_content"
        Android:layout_height="80dp"
        Android:layout_marginEnd="10dp"
        Android:layout_marginRight="10dp"
        Android:background="@null"
        Android:text="Play Game"
        Android:textColor="#ff0000"
        Android:textStyle="italic" />

    <ImageView
        Android:id="@+id/imageView"
        Android:layout_width="wrap_content"
        Android:layout_height="80dp"
        Android:src="@drawable/messi" />

</LinearLayout>

Solution 2:

Vous pouvez également faire ce qui suit si vous préférez celui-ci, mais vous devrez ajouter onClickListener () pour chacun d'eux:

<LinearLayout
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    Android:background="@drawable/ronaldo"
    Android:orientation="horizontal">

    <Button
        Android:id="@+id/button"
        Android:layout_width="wrap_content"
        Android:layout_height="80dp"
        Android:background="@null"
        Android:text="Play Game"
        Android:textColor="#ff0000"
        Android:textStyle="italic" />

    <ImageButton
        Android:id="@+id/imageButton"
        Android:layout_width="wrap_content"
        Android:layout_height="80dp"
        Android:src="@drawable/messi" />

</LinearLayout>

Solution 3:

Comme vous l'avez suggéré dans les commentaires, vous feriez quelque chose comme ceci:

<RelativeLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="wrap_content"
    Android:layout_height="80dp"
    Android:layout_gravity="center"
    Android:background="@drawable/ronaldo">

    <Button
        Android:id="@+id/button"
        Android:layout_width="wrap_content"
        Android:layout_height="80dp"
        Android:layout_alignLeft="@+id/buttonLayout"
        Android:layout_alignRight="@+id/buttonLayout"
        Android:background="@null" />

    <LinearLayout
        Android:id="@+id/buttonLayout"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal">

        <TextView
            Android:id="@+id/textView"
            Android:layout_width="wrap_content"
            Android:layout_height="80dp"
            Android:gravity="center"
            Android:text="Play Game"
            Android:textAppearance="?android:attr/textAppearanceMedium"
            Android:textColor="#ff0000"
            Android:textStyle="italic" />

        <ImageView
            Android:id="@+id/imageView"
            Android:layout_width="wrap_content"
            Android:layout_height="80dp"
            Android:src="@drawable/messi" />

    </LinearLayout>

</RelativeLayout>
15
Hussein El Feky

J'ai supprimé le button et créé un calque comme un button

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="50dp"
    Android:background="@Android:color/background_light"
    Android:gravity="center"
    Android:orientation="horizontal">


    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        Android:gravity="center"
        Android:onClick="go_map"
        Android:clickable="true"
        Android:orientation="vertical">

        <ImageView
            Android:id="@+id/img_m0"
            style="@style/menu2img"
            app:srcCompat="@drawable/ico_m0" />
       <TextView
            Android:id="@+id/textView2"
            style="@style/menu2text"
            Android:text="@string/men_map" />
    </LinearLayout>

[]

1
Evgeni Ivlvv

Si vous utilisez l'API> = 23, vous pouvez placer la ressource dessinable dans un fichier XML comme celui-ci messi_smaller.xml

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item
        Android:drawable="@drawable/messi"
        Android:width="smaller_width_in_dp"
        Android:height="smaller_height_in_dp">
    </item>
</layer-list>

Vous devez vous assurer de conserver le ratio d'étirage lorsque vous définissez la largeur et la hauteur. Et utilisez simplement ce dessin dans votre bouton:

<Button
    Android:layout_width="80dp"
    Android:layout_height="80dp"
    Android:layout_gravity="center"
    Android:drawablePadding="10dp"
    Android:id="@+id/button"
    Android:text="Play Game"
    Android:background="@drawable/ronaldo"
    Android:drawableRight="@drawable/messi_smaller" />

De cette façon, vous pouvez modifier la taille de dessin uniquement dans le code xml

1
Ulysses CP

vous pouvez utiliser un RelativeLayout comme ceci:

<RelativeLayout
    Android:layout_width="80dp"
    Android:layout_height="80dp"
    Android:background="@drawable/ronaldo">

    <Button
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:text="play game"
        />
    <ImageView
        Android:layout_width="40dp"
        Android:layout_height="40dp"
        Android:layout_alignParentRight="true"
        Android:layout_centerVertical="true"
        Android:background="@drawable/messi"
        Android:scaleType="fitXY"
        />
</RelativeLayout>
0
saleh sereshki

Essaye ça :

final Button button = (Button) findViewById(R.id.button1);
ViewTreeObserver vto = button.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            public boolean onPreDraw() {
                button.getViewTreeObserver().removeOnPreDrawListener(this);
                //scale to 90% of button height
                DroidUtils.scaleButtonDrawables(button, 0.9);
                return true;
            }
        });
0
PSN