Подтвердить что ты не робот

Масштабирование выталкиваемой внутри кнопки?

В настоящее время мой drawable просто масштабирует его нормальный размер, я хочу, чтобы он поместился внутри моей кнопки. Вот картина того, как это выглядит сейчас:

enter image description here

Вот xml для кнопки:

<LinearLayout android:layout_width="wrap_content"
    android:id="@+id/linearLayout2" android:layout_height="40dp"
    android:layout_weight="0.4" android:gravity="right|center_vertical"
    android:paddingRight="5dp">
    <Button android:id="@+id/button1" android:background="@drawable/refresh"
        android:layout_height="25dp" android:layout_width="150dp"
        android:text="@string/buttonSearchAgain" android:drawableRight="@drawable/refresh_48"></Button>
</LinearLayout>

Итак, я хочу, чтобы это выглядело так:

enter image description here

Есть ли способ уменьшить мои возможности?

4b9b3361

Ответ 1

Восстановите изображение. Держите размер изображения в пикселях, но уменьшите размер стрелки и сделайте остальное прозрачным. Что моя ставка в любом случае =)

Ответ 2

Вы можете решить эту проблему программно: взгляните на функцию scaleButtonDrawables в на этот ответ. С помощью этой функции вы можете написать в onCreate() своей деятельности:

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;
            }
        });

(Вы не можете вызвать это напрямую, потому что высота кнопки недоступна в onCreate().)

Ответ 3

Поскольку вы не можете изменять или масштабировать изображение поверх xml, вам нужно установить составные допустимые границы внутри кода.

Переопределите класс Button с помощью собственного "CustomButton". Затем переопределите метод "SetCompoundDrawables (левый, верхний, правый, нижний):

    public override void SetCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)
    {
        if (right != null)
        {
            var bounds = right.Bounds;
            right.SetBounds(bounds.Left, bounds.Top, bounds.Right, bounds.Bottom - 70);
        }

        if (left != null)
        {
            var bounds = left.Bounds;
            left.SetBounds(bounds.Left, bounds.Top, bounds.Right, bounds.Bottom - 70);
        }

        base.SetCompoundDrawables(left, top, right, bottom);
    }

Помните, что это код С#, так как я использую Xamarin. Но код Java должен быть одинаковым (несмотря на некоторые подписи на верхнем регистре)

Ответ 4

Я думаю, что нашел решение для вашей проблемы, очень поздно, но это может помочь другим.

Drawable drawable = getResources().getDrawable(R.drawable.s_vit);
drawable.setBounds(0, 0, (int)(drawable.getIntrinsicWidth()*0.5), 
                     (int)(drawable.getIntrinsicHeight()*0.5));
ScaleDrawable sd = new ScaleDrawable(drawable, 0, scaleWidth, scaleHeight);
Button btn = findViewbyId(R.id.yourbtnID);
btn.setCompoundDrawables(sd.getDrawable(), null, null, null); 

Ответ 5

Try

<Button android:id="@+id/button1" android:background="@drawable/refresh"
    android:layout_height="25dp" android:layout_width="150dp"
    android:text="@string/buttonSearchAgain" android:drawableRight="@drawable/refresh_48"
    android:padding="5dp"></Button>

(Итак, добавьте android:padding="5dp")

Ответ 6

Я сделал это! Это немного беспорядочно, и я вообще не использовал представления кнопок. Сам "button" является relativeLayout, поэтому, если вы хотите использовать это решение, вам придется притворяться, что некоторые приходят, если вы хотите, чтобы кнопка была анимирована. Вот мой XML:

<LinearLayout android:layout_width="wrap_content"
    android:id="@+id/linearLayout2" android:layout_height="40dp"
    android:layout_weight="0.4" android:gravity="right|center_vertical"
    android:paddingRight="5dp">
    <RelativeLayout android:layout_height="25dp"
        android:layout_width="150dp" android:id="@+id/relativeLayout1"
        android:clickable="true">
        <ImageView android:id="@+id/imageView1" android:scaleType="fitXY"
            android:adjustViewBounds="true" android:layout_width="fill_parent"
            android:src="@drawable/saywhat" android:layout_height="fill_parent"></ImageView>
        <LinearLayout android:layout_width="fill_parent"
            android:id="@+id/linearLayout3" android:weightSum="1"
            android:layout_height="fill_parent">
            <TextView android:layout_weight="0.6"
                android:layout_height="fill_parent" android:text="TextView"
                android:layout_width="wrap_content" android:id="@+id/textView1"></TextView>
            <LinearLayout android:layout_weight="0.4"
                android:layout_height="fill_parent" android:layout_width="wrap_content"
                android:id="@+id/linearLayout4">
                <ImageView android:id="@+id/imageView2"
                    android:layout_height="wrap_content" android:scaleType="fitXY"
                    android:adjustViewBounds="true" android:layout_width="wrap_content"
                    android:src="@drawable/refresh_48"></ImageView>
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>

Наслаждайтесь:)