Проблемы пользовательского макета представления Android - PullRequest
0 голосов
/ 21 июля 2011

Краткое и сладкое резюме:

При изменении класса с View -произведенного на ViewGroup -произведенного параметры высоты и / или ширины, переданные в onSizeChanged, не соответствуют для моего класса при использовании внутри LinearLayout. Нужно ли предоставлять какую-либо дополнительную информацию при использовании ViewGroup в качестве суперкласса для достижения стабильных результатов?

Длинная версия:

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

объявление класса:

public class GameButton extends View {

XML:

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:orientation="horizontal"
        android:layout_weight="1">
        <com.myname.myapp.controls.GameButton
            android:id="@+id/button1"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1" />

Я хочу немного поработать с элементом управления, поэтому я изменил его, чтобы он наследовал от ViewGroup или любого подкласса ViewGroup (например, в настоящее время пытаюсь сделать его RelativeLayout, например). Как только я это сделаю, он исчезнет.

Я добавил запись в журнал, чтобы увидеть значения, передаваемые в onSizeChanged, и я получаю 0 высоту, передаваемую в onSizeChanged для каждого экземпляра моего элемента управления без изменений в компоновке xml (см. Выше), которая работает иначе, когда я получаю непосредственно из вид.

Нужно ли добавлять какие-либо дополнительные подсказки, параметры или параметры макета либо в XML, либо в код при переключении из View в ViewGroup?

1 Ответ

1 голос
/ 22 июля 2011

Вам необходимо реализовать onMeasure (), чтобы сообщить инструментарию, какой у вас размер (вы должны вызвать setMeasuredDimension () в конце onMeasure ().) ViewGroup, по умолчанию, вычисляет их размер на основе их дочерних элементов, и вы не здесь их нет, поэтому размер 0x0.

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