Android: универсальный способ установить размеры виджета в коде? - PullRequest
1 голос
/ 06 октября 2011

У меня есть пользовательская кнопка, и я хочу установить ее размеры в коде (в отличие от xml), чтобы пользователи могли настраивать размеры. На первый взгляд очевидный путь к этому:

public class MyButton extends Button
{
    public MyButton(Context context, AttributeSet attrs)
    {
        super(context, attrs);

        int buttonSize = getSize();
        setLayoutParams(new LinearLayout.LayoutParams(buttonSize, buttonSize));
    }

Однако это не является универсальным, потому что это работает, только если родительский элемент Button является LinearLayout. Вместо этого я попробовал это:

@Override
protected void onMeasure(int specw, int spech)
{
    int spec = MeasureSpec.makeMeasureSpec(getButtonSize()), MeasureSpec.EXACTLY);
    super.onMeasure(spec, spec);
}

... что, кажется, работает хорошо. Кто-нибудь знает о каких-либо недостатках этого? или знаете о лучшем способе общего определения размеров виджетов в коде?

1 Ответ

2 голосов
/ 06 октября 2011

Выполнение этого из onMeasure () - хороший способ сделать это (даже если ваш код не работает, так как вы не используете созданную вами спецификацию меры). Вы также можете переопределить onFinishInflate () и вызвать getLayoutParams.() и измените поля ширины и высоты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...