Установка ширины EditText - PullRequest
0 голосов
/ 11 мая 2011

Я устанавливаю ширину элемента EditText в fill_parent в XML-файле, но при доступе к нему из кода он возвращает 0. То, что я хочу, - это фактическая ширина этого элемента во время выполнения.Как я мог это сделать.

Ответы [ 3 ]

2 голосов
/ 11 мая 2011

Используйте getMeasuredWidth (): http://developer.android.com/reference/android/view/View.html#getMeasuredWidth%28%29

Читайте также здесь:

Когда возвращается метод measure (), его значения getMeasuredWidth () и getMeasuredHeight ()установить, вместе с теми для всех потомков этого представления.Измеренная ширина представления и измеренные значения высоты должны учитывать ограничения, накладываемые родителями представления.Это гарантирует, что в конце прохождения меры все родители примут все измерения своих детей.Родительское представление может вызывать measure () более одного раза для своих дочерних элементов.Например, родитель может измерить каждого ребенка один раз с неопределенными измерениями, чтобы выяснить, насколько велики они хотят быть, а затем снова вызвать measure () для них с фактическими числами, если сумма всех неограниченных размеров детей слишком велика или слишком мала (то есть, если дети не соглашаются между собой относительно того, сколько места они получают, родитель вмешается и установит правила для второго прохода).

http://developer.android.com/guide/topics/ui/how-android-draws.html

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

Вы можете решить эту проблему, создав собственный View и переопределив метод onMeasure ().Если вы всегда используете «fill_parent» для layout_width в xml, то параметр widthMeasureSpec, который передается в метод onMeasusre (), должен содержать ширину родительского элемента.

public class MyCustomView extends EditText {

public MyCustomView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
    int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
}
}   

Ваш XML будет выглядеть примерно так:

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <view
        class="com.company.MyCustomView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</LinearLayout>
0 голосов
/ 11 мая 2011

Я отсылаю вас к предыдущему ответу по этой теме, который должен быть полезен:

Как получить размеры представления?

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