Последняя строка расширяемого списка не полностью отображается в android

Красная метка Строка

Здесь я использую view и там код, как указано ниже.

<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TableRow android:id="@+id/tab_stone_info" android:layout_width="match_parent" android:layout_height="30dp" android:layout_marginTop="1dp" android:background="@color/styleBreakTabColor" android:weightSum="9"> <TextView android:id="@+id/stone_Type" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/cell_shape" android:gravity="center" android:text="@string/Type" android:textColor="@color/txtStyleBreakup" android:textSize="12sp" /> <TextView android:id="@+id/stone_Shape" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/cell_shape" android:gravity="center" android:text="@string/Shape" android:textColor="@color/txtStyleBreakup" android:textSize="12sp" /> <TextView android:id="@+id/stone_Qlty" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/cell_shape" android:gravity="center" android:text="@string/Quality" android:textColor="@color/txtStyleBreakup" android:textSize="12sp" /> <TextView android:id="@+id/stone_Grade" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/cell_shape" android:gravity="center" android:text="@string/Grade" android:textColor="@color/txtStyleBreakup" android:textSize="12sp" /> <TextView android:id="@+id/stone_Qty" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/cell_shape" android:gravity="center" android:text="@string/Qty" android:textColor="@color/txtStyleBreakup" android:textSize="12sp" /> <TextView android:id="@+id/stone_Wt" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/cell_shape" android:gravity="center" android:text="@string/Wt" android:textColor="@color/txtStyleBreakup" android:textSize="12sp" /> <TextView android:id="@+id/stone_MMSize" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/cell_shape" android:gravity="center" android:text="@string/MMSize" android:textColor="@color/txtStyleBreakup" android:textSize="12sp" /> <TextView android:id="@+id/stone_Setting" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/cell_shape" android:gravity="center" android:text="@string/Setting" android:textColor="@color/txtStyleBreakup" android:textSize="12sp" /> <TextView android:id="@+id/stone_SettMode" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/cell_shape" android:gravity="center" android:text="@string/SettingMode" android:textColor="@color/txtStyleBreakup" android:textSize="12sp" /> </TableRow> <RelativeLayout android:id="@+id/layout_tab_stone_info_value" android:layout_width="match_parent" android:layout_height="match_parent" > <com.mindtech.ExpandableHeightListView android:id="@+id/listviewstone" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="#00000000" android:gravity="center" android:horizontalSpacing="2dp" android:isScrollContainer="false" android:stretchMode="columnWidth" android:verticalSpacing="20dp" /> </RelativeLayout> </LinearLayout> 

И я использую epandablelistview как ниже класс.

 public class ExpandableHeightListView extends ListView { boolean expanded = false; public ExpandableHeightListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public ExpandableHeightListView(Context context) { super(context); } public ExpandableHeightListView(Context context, AttributeSet attrs) { super(context, attrs); } public boolean isExpanded() { return expanded; } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, // MeasureSpec.AT_MOST); // // super.onMeasure(widthMeasureSpec, expandSpec); // int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec( // Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); // super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom); // ViewGroup.LayoutParams params = getLayoutParams(); // params.height = getMeasuredHeight(); if (isExpanded()) { int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); ViewGroup.LayoutParams params = getLayoutParams(); params.height = getMeasuredHeight(); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } public void setExpanded(boolean expanded) { this.expanded = expanded; } } 

Я ссылаюсь на этот вопрос, но не понимаю. Сетка изображений внутри ScrollView

Высота Gridview снижается

Основная проблема возникает, когда высота первой строки не больше, чем вторая. Если вся длина содержимого строки одинакова, то проблем нет.

Похоже, что вы получаете LayoutParams для своего ListView, изменяя параметр height, но вы никогда не вызываете setLayoutParams, чтобы сообщить view использовать измененную высоту. Попробуй это:

 if (isExpanded()) { int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); ViewGroup.LayoutParams params = getLayoutParams(); params.height = getMeasuredHeight(); //Add this line setLayoutParams(params); } 

Кроме того, в прошлом я сталкивался с проблемами с методом onMeasure (), но не все измеряется, когда инфраструктура вызывает этот метод. Вы можете попробовать ViewTreeObserver , где вы можете зарегистрировать прослушиватель, который будет уведомлен, когда будет выведен полный вид, например:

 final LinearLayout layout = (LinearLayout) findViewById(R.id.layout_id); ViewTreeObserver vto; if (layout != null) { vto = layout.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { layout.getViewTreeObserver().removeOnGlobalLayoutListener(this); //Modify your LayoutParams here } }); } 

Если есть только один ребенок, лучше использовать ExpandableListView или RecyclerView с разными layouts . Вот полный и очень хороший учебник по использованию ExpandableListView .

При использовании ListView он всегда добавляет высоту, которая немного меньше оригинальной (или может быть, есть другой случай, но я не знаю почему. Если кто-то знает, чем любезно исправляет меня). Таким образом, вы должны добавить некоторую высоту dp's вручную в конце.

Я сделал это, переопределив метод onDraw . Ниже, как я это сделал.

 @Override protected void onDraw(Canvas canvas) { params = getLayoutParams(); if (getCount() != old_count) { old_count = getCount(); params.height = getCount() * (old_count > 0 ? getChildAt(0).getHeight()+5 : 0); //I've added 5 pixels with each item to get proper height, you can alter it as per your need setLayoutParams(params); } super.onDraw(canvas); } 

Вы изменяете высоту, но вы не передаете ее в представление.

Используйте этот метод, setLayoutParams (params);

Intereting Posts
Включить и управлять курсором мыши на android По умолчанию bindPreferenceSummaryToValue сбой для нестроковых типов Плагин геолокации на Cordova 5.0.0 всегда возвращает время ожидания с ошибкой Использование Mock Location в приложении Navigation Android ListView и ArrayAdapter / Arraylist Mapbox не отображается в формате XML View Невозможно отобразить изображение контактных данных в телефонной зазоре Недостаточная история установки в рекламе facebook Не удалось скрыть виртуальную клавиатуру SearchView iconfiedbydefault (false) Как проверить, имеет ли устройство переднюю и заднюю камеры? Подписание Google в приложении Android для использования бэкэнд Cloud Endpoints Не удается отладить собственный код c ++ для Android в Eclipse в Windows Как обеспечить пользовательскую анимацию во время сортировки (notifyDataSetChanged) в RecyclerView Дизайн шаблонов для Android Android Data Binding приводит к сбою приложения при использовании тега include в не-root ViewGroup