2015-01-23 1 views
1

Как и в названии, есть способ либо через xml, либо программно, чтобы список заполнил высоту навигационного ящика если список не содержит достаточно элементов. Например, если у меня есть список из 4 предметов с фоном черного цвета, а 4 элемента занимают половину высоты ящика, остальная часть ящика серая и выглядит глупо. Я справился с этим, увеличив количество элементов на каждом элементе, но, по-моему, это своего рода хакки. Плюс я должен увеличить заполнение совсем немного на устройствах с более высокой плотностью, которые я хочу поддержать.Есть ли способ, чтобы список ячеек навигатора заполнил высоту ящика без добавления отступов к элементам списка.

В случае с опубликованным кодом я добавил 22dp отступов для устройства xxhdpi. Любые советы приветствуются. Спасибо.

Выдвижных XML

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<FrameLayout 
    android:id="@+id/drawer_frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 


<ListView 
    android:id="@+id/left_drawer" 
    android:layout_width="300dp" 
    android:layout_height="fill_parent" 
    android:layout_gravity="start" 
    android:choiceMode="singleChoice" 
    android:divider="@android:color/black" 
    android:dividerHeight="1dp" 
    android:background="@android:color/darker_gray" 
    android:footerDividersEnabled="false"/> 



</android.support.v4.widget.DrawerLayout> 

ящик Items XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingTop="22dp" 
     android:paddingBottom="22dp"> 

    <ImageView 
     android:id="@+id/item_icon" 
     android:layout_width="50dp" 
     android:layout_height="49dp" 
     android:padding="10dp"/> 

    <TextView 
     android:id="@+id/item_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/item_icon" 
     android:background="?android:attr/activatedBackgroundIndicator" 
     android:gravity="center_vertical" 
     android:minHeight="?android:attr/listPreferredItemHeightSmall" 
     android:paddingLeft="16dp" 
     android:paddingRight="16dp" 
     android:textAppearance="?android:attr/textAppearanceListItemSmall" 
     android:textColor="#fff"/> 

</RelativeLayout> 

ответ

0

Есть ли у вас статическое количество элементов? Если это так, вы можете легко получить общую высоту ListView и разделить ее на количество элементов. Затем вы устанавливаете высоту элемента для каждой строки.

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

Смежные вопросы