Как я могу уменьшить рисунок на кнопке? - PullRequest
81 голосов
/ 24 сентября 2011

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

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

Чем больше он выглядит, тем ниже он выглядит прямо сейчас.это, но изображение не отображается.: - (

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

Ответы [ 15 ]

0 голосов
/ 03 января 2017
  • Используя функцию «BATCH DRAWABLE IMPORT», вы можете импортировать нестандартный размер в зависимости от ваших требований. 20dp * 20dp

    • Теперь после импорта используйте импортированный drawable_image в качестве drawable_source для вашей кнопки

    • Так проще enter image description here

0 голосов
/ 11 октября 2016

Вот функция, которую я создал для масштабирования векторных отрисовок. Я использовал его для настройки составного объекта TextView.

/**
 * Used to load vector drawable and set it's size to intrinsic values
 *
 * @param context Reference to {@link Context}
 * @param resId   Vector image resource id
 * @param tint    If not 0 - colour resource to tint the drawable with.
 * @param newWidth If not 0 then set the drawable's width to this value and scale 
 *                 height accordingly.
 * @return On success a reference to a vector drawable
 */
@Nullable
public static Drawable getVectorDrawable(@NonNull Context context,
                                         @DrawableRes int resId,
                                         @ColorRes int tint,
                                         float newWidth)
{
    VectorDrawableCompat drawableCompat =
            VectorDrawableCompat.create(context.getResources(), resId, context.getTheme());
    if (drawableCompat != null)
    {
        if (tint != 0)
        {
            drawableCompat.setTint(ResourcesCompat.getColor(context.getResources(), tint, context.getTheme()));
        }

        drawableCompat.setBounds(0, 0, drawableCompat.getIntrinsicWidth(), drawableCompat.getIntrinsicHeight());

        if (newWidth != 0.0)
        {
            float scale = newWidth / drawableCompat.getIntrinsicWidth();
            float height = scale * drawableCompat.getIntrinsicHeight();
            ScaleDrawable scaledDrawable = new ScaleDrawable(drawableCompat, Gravity.CENTER, 1.0f, 1.0f);
            scaledDrawable.setBounds(0,0, (int) newWidth, (int) height);
            scaledDrawable.setLevel(10000);
            return scaledDrawable;
        }
    }
    return drawableCompat;
}
0 голосов
/ 05 июня 2014

Я попробовал методы этого поста, но не нашел ни одного из них настолько привлекательным.Мое решение состояло в том, чтобы использовать viewview и textview и выровнять верхнюю и нижнюю часть viewview к textview.Таким образом, я получил желаемый результат.Вот некоторый код:

<RelativeLayout
    android:id="@+id/relativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="48dp" >


    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@+id/textViewTitle"
        android:layout_alignBottom="@+id/textViewTitle"
        android:src="@drawable/ic_back" />

    <TextView
        android:id="@+id/textViewBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textViewTitle"
        android:layout_alignBottom="@+id/textViewTitle"
        android:layout_toRightOf="@+id/imageView1"
        android:text="Back"
        android:textColor="@color/app_red"
        android:textSize="@dimen/title_size" />
</RelativeLayout>
0 голосов
/ 24 сентября 2011

Вы пытались обернуть ваше изображение в ScaleDrawable и затем использовать его в своей кнопке?

0 голосов
/ 24 сентября 2011

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

См. Здесь: http://developer.android.com/guide/practices/screens_support.html#support

...