Ответ 1
Восстановите изображение. Держите размер изображения в пикселях, но уменьшите размер стрелки и сделайте остальное прозрачным. Что моя ставка в любом случае =)
В настоящее время мой drawable просто масштабирует его нормальный размер, я хочу, чтобы он поместился внутри моей кнопки. Вот картина того, как это выглядит сейчас:
Вот 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>
Итак, я хочу, чтобы это выглядело так:
Есть ли способ уменьшить мои возможности?
Восстановите изображение. Держите размер изображения в пикселях, но уменьшите размер стрелки и сделайте остальное прозрачным. Что моя ставка в любом случае =)
Вы можете решить эту проблему программно: взгляните на функцию 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().)
Поскольку вы не можете изменять или масштабировать изображение поверх 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 должен быть одинаковым (несмотря на некоторые подписи на верхнем регистре)
Я думаю, что нашел решение для вашей проблемы, очень поздно, но это может помочь другим.
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);
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"
)
Я сделал это! Это немного беспорядочно, и я вообще не использовал представления кнопок. Сам "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>
Наслаждайтесь:)