Автоматично преоразмеряване на ImageButton с фон LayerDrawable

Имам ImageButton, който трябва да съдържа текста. За това използвам LayerDrawable (метод createImage в клас CustomViewFactory) Накратко

 public class CustomViewFactory extends ImageButton {
    public CustomViewFactory createButton(String text) {
    this.setBackgroundDrawable(createImage(R.drawable.back_configuration, text));
    return this;
    }

back_configuration.xml

  <?xml version="1.0" encoding="utf-8"?>
     <selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/back_button_pressed" adroid:state_pressed="true">     </item>
    <item android:drawable="@drawable/back_button_normal"></item>
    <item android:drawable="@drawable/back_button_pressed" android:state_focused="true"/>

    </selector>

back_button_normal и back_button_pressed - 9 пача png файла.

public LayerDrawable createImage(int resource, String text){
        Drawable [] layers = new Drawable[2];
        layers[0] = new TextDrawable(text);
        layers[1] = r.getDrawable(R.drawable.back_configuration);
        return new LayerDrawable(resource);
    }

public class TextDrawable extends Drawable {

    private final String text;
    private final Paint paint;
    public TextDrawable(String text) {

        this.text = text;
       this.paint = new Paint();
        paint.setColor(Color.WHITE);
        paint.setFilterBitmap(true); 
        paint.setTextSize(textSize);
        paint.setAntiAlias(true);
        paint.setFakeBoldText(true);
        paint.setStyle(Paint.Style.FILL);
        paint.setTextAlign(Paint.Align.LEFT);

    }

    @Override
    public void draw(Canvas canvas) {
        canvas.drawText(text, 0, 0, paint);
    }

    @Override
    public void setAlpha(int alpha) {
        paint.setAlpha(alpha);
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
        paint.setColorFilter(cf);
    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }
}

проблем. Ако текстът е голям, той се отрязва. Как да накарате самия ImageButton да се увеличи по размер в зависимост от текста вътре. Какви са алтернативните методи.

И ако използвам бутона, изображението се разтяга върху бутона

Извинявам се за моя английски. Благодаря ти много.


person Yuriy Aizenberg    schedule 15.08.2012    source източник


Отговори (1)


Можете да опитате да използвате textView вместо imageView или imageButton и след това да зададете фон за текстовия изглед като изображението, което искате, и да зададете текста, който искате за textView, и да го направите wrap_content за layout_width

Редактиране: проверете дали използвате подложка за текстовия изглед, премахнете я.

person Amt87    schedule 15.08.2012
comment
Благодаря ти! Наистина е работа. Имаше един проблем. Текстът не е по средата. imageshack.us/photo/my-images/855/26032627.png - person Yuriy Aizenberg; 15.08.2012
comment
Можете да зададете гравитационния атрибут за textView да се центрира - person Amt87; 15.08.2012
comment
android:gravity=center ... ако отговорът работи за вас, можете да го отметнете вляво - person Amt87; 15.08.2012
comment
setGravity(center) за textView не работи. Това е припадък, това, което опитвам - person Yuriy Aizenberg; 15.08.2012
comment
Съжаляваме, гравитацията работи, но изображението и текстът не съвпадат. Зададох 10 реда. Вижте imageshack.us/photo/my-images/850/53823453.png - person Yuriy Aizenberg; 15.08.2012
comment
Съвсем не ... сега какво е състоянието? все още ли е като изображението в линка? - person Amt87; 15.08.2012
comment
Да (Ако използвам метода setText, текстът и изображението не съвпадат... те използват различни центрове. - person Yuriy Aizenberg; 15.08.2012
comment
wrap_content за ширина и височина - person Amt87; 15.08.2012
comment
Никакъв ефект. Искам да получа компонент (изглед) с: мащабиране, изображение, текст. Разтягащо се изображение на бутон. ImageButton няма метод setText. TextView много добро разтягащо се изображение в зависимост от текста, но текстът и изображението не съвпадат... идеи? - person Yuriy Aizenberg; 15.08.2012
comment
Не знам защо, но когато променя изходния клас (заменете разширяващия TextView на разширения бутон), нищо не се променя. imageshack.us/photo/my-images/32/34392910.png . Опитвам и TextView, и Button. Без разлики - person Yuriy Aizenberg; 15.08.2012
comment
Amt87, благодаря ти много. Беше моя грешка. Използвам корекция 9 неправилно, забравям зададените пътища на съдържанието. - person Yuriy Aizenberg; 15.08.2012