Единый размер EditText - PullRequest
0 голосов
/ 17 мая 2011

Я пытаюсь получить все редактируемые текстовые представления одинакового размера без использования жесткого определения, такого как px или dp, но вместо этого использовать wrap_content и получить их все одинакового размера. Это то, что у меня есть, но оно не работает:

    enterAge = (EditText) findViewById(R.id.enterAge);
    enterAge.addTextChangedListener(new TextWatcher1());

    enterWeight = (EditText) findViewById(R.id.enterWeight);
    enterWeight.addTextChangedListener(new TextWatcher2());
    enterWeight.setWidth(enterAge.getWidth());

    enterHeight = (EditText) findViewById(R.id.enterHeight);
    enterHeight.addTextChangedListener(new TextWatcher3());
    enterHeight.setWidth(enterAge.getWidth());

    enterMealFrequency = (EditText) findViewById(R.id.enterMealFrequency);
    enterMealFrequency.addTextChangedListener(new TextWatcher4());
    enterMealFrequency.setWidth(enterAge.getWidth());

Любые предложения о том, почему это не работает так, как я хочу?

Ответы [ 3 ]

1 голос
/ 17 мая 2011

wrap_content в корне противоположно тому, что вы говорите - оно указывает на то, чтобы сделать представление настолько большим, насколько это необходимо, независимо от размера родительского элемента.иерархия представления с макетами, описывающими, как расположить представления.Очень просто создать вертикальный ряд текстовых представлений, которым всем дают одинаковую ширину, поместив их в LinearLayout.

1 голос
/ 17 мая 2011

Это полностью зависит от того, когда вы выполняете этот код. Значения ширины и высоты View не будут возвращать действительные данные в коде Java до тех пор, пока макет не будет завершен (это происходит некоторое время позже, чем при раздувании макета из XML). Если вы делаете это в onCreate() или даже onResume(), это слишком рано, и getWidth(), скорее всего, вернет ноль.

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

Надеюсь, что поможет!

0 голосов
/ 17 мая 2011

Я решил аналогичную проблему, представив свой собственный класс, который расширяет EditText, например,

public class SimpleEditText extends EditText
{
    private static float textSize=14.0;

    public SimpleEditText(Context context)
    {
        super(context);
        this.setTextSize(textSize);
    }

    public SimpleEditText(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        this.setTextSize(textSize);
    }

    public SimpleEditText(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        this.setTextSize(textSize);
    }
}

В ресурсе вы можете напрямую использовать ссылку на SimpleEditText вместо EditText (наверняка нужно помнить, что все размерысвязанные атрибуты XML будут игнорироваться ...)

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