web-dev-qa-db-ja.com

ボタン内のドローアブルサイズの変更

次のようにButtonを作成します。

Button Example

これが私のコードです:

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

しかし messi.jpegが大きすぎるため、この状況ではテキストが表示されません。ボタンに合わせて画像サイズを縮小するにはどうすればよいですか?

誰かがこの問題を解決するのを手伝ってくれませんか?

8
Khuong

解決策1:

ドローアブルをボタンに追加すると、機能が非常に制限されます。ドローアブルのサイズを変更することはできないため、これを修正する最良の方法は、次のような線形レイアウトの横に画像ビューのあるボタンを追加することです。

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

解決策2:

これを希望する場合は、次のこともできますが、それぞれにonClickListener()を追加する必要があります。

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

解決策3:

あなたがコメントで提案したように、あなたはこのようなことをするでしょう:

<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

buttonを削除し、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

API> = 23を使用している場合は、ドローアブルリソースを次のようにXMLファイル内に配置できます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>

幅と高さを設定するときは、ドローアブル比率を維持する必要があります。そして、このドローアブルをボタンで使用してください:

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

この方法で、XMLコードだけでドローアブルのサイズを変更できます

1
Ulysses CP

次のようにRelativeLayoutを使用できます。

<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

これを試して :

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