Получить высоту ExpandableListView или .getHeight всегда = 0

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
Leeroy
Сообщения: 67
Зарегистрирован: 12 дек 2013, 21:25

Получить высоту ExpandableListView или .getHeight всегда = 0

Сообщение Leeroy » 12 сен 2014, 18:14

Подскажите пожалуйста, как получить высоту дочернего элемента выпадающего списка?

Я умышленно пошел против гайдлайнов и паттернов гугла и поместил ExpandableListView внутрь ScrollView.
В ExpandableListView 12 групп по одному элементу (TextView) в каждой группе (выпадающем списке).

Хочу получить высоту дочернего элемента во время раскрытия группы ( public void onGroupExpand(int i) { } ), что бы затем при раскрытии увеличить высоту ExpandableListView на высоту дочернего элемента, иначе выпадающий список не скролится (т.к. срабатывает скролл от ScrollView )

Код: Выделить всё

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/preparati_scrollview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/background" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="@string/name"
            android:textColor="@color/text_title"
            android:textSize="20sp">

        </TextView>


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/description"
             />

        <ImageView
            android:id="@+id/image"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:src="@drawable/char" />

        <TextView
            android:id="@+id/tv_description"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/text_color" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/producer"
            android:textColor="@color/text_title" />

        <TextView
            android:id="@+id/tv_producer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/text_color" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/group"
            android:textColor="@color/text_title" />

        <TextView
            android:id="@+id/tv_group"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/release_form"
            android:textColor="@color/text_title" />

        <TextView
            android:id="@+id/tv_release_form"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/text_color" />

        <ExpandableListView
            android:id="@+id/expandableListView"
            android:layout_width="match_parent"
            android:layout_height="700dp"
            android:groupIndicator="@drawable/indicator" />
    </LinearLayout>
</ScrollView>

Код: Выделить всё

TextView childItem = (TextView) mExpandableListView 
                        .getExpandableListAdapter().getChildView(i, 0, false, null, mExpandableListView); 
                Log.d(LOG_TAG, "view " + childItem.getClass().toString() + 
                                           " hight " + childItem.getHight() +  
                                           " Measuredhight " + childItem.getMeasuredHeight() + 
                                           " LayoutParams.hight " + childItem.getLayoutParams().height ); 

Код: Выделить всё

Height 0 
MeasuredHeight 0 
LayoutParams.height -2
Всегда возвращается 0, хотя там текста больше 20kB.

На стаковерфлоу рекомендуют расширить класс TextView и переопределить метод, в котором высчитать количество строк. Может есть более простой способ?

Этот весь велосипед пришлось изобретать т.к. не нашел в андроиде стандартных спойлеров ( напр. HTML текст под спойлером)
P.S.
Java Core -> JDBC -> GoF -> Android SDK ->...
Телепрограмма в твоем смарте Телепрограмма

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Получить высоту ExpandableListView или .getHeight всегда

Сообщение Foenix » 12 сен 2014, 19:43

да, надо свой класс писать, т.к. нет доступа к размерам вьюшки в то время, когда вы хотите ее получить.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Получить высоту ExpandableListView или .getHeight всегда

Сообщение Mikhail_dev » 12 сен 2014, 19:56

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


Ответить