Intereting Posts

Последняя строка расширяемого списка не полностью отображается в 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);