如何减少列表视图项的高度

Posted

技术标签:

【中文标题】如何减少列表视图项的高度【英文标题】:How to reduce listview item height 【发布时间】:2012-06-26 21:53:11 【问题描述】:

我有一个可展开的列表视图。这些行由一个文本视图和一个自定义复选框组成。复选框的大小取决于 textview 的文本大小。只有两种可用尺寸。当显示大复选框时,行之间的差异很小。当显示小复选框时,它看起来很大。如何减少行之间的行高?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_
 android:layout_
 android:id="@+id/childlayout"
 android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_
        android:layout_ >

        <LinearLayout
            android:layout_
            android:layout_centerVertical="true"
            android:layout_
            android:layout_marginLeft="50dp" >

            <TextView
                android:id="@+id/child_title"
                android:layout_
                android:layout_
                android:layout_gravity="center_vertical"
                android:gravity="center_vertical"
                android:textColor="#000000"/>

        </LinearLayout>

        <CheckBox
            android:id="@+id/multiple_checkbox"
            android:layout_
            android:layout_centerVertical="true"
            android:layout_
            android:layout_alignParentRight="true"
            android:checked="true"
            android:layout_marginRight="10dp"
            android:button="@drawable/productlists_custom_cb"
            android:clickable="false"
            android:focusable="false"
            android:focusableInTouchMode="false" />
    </RelativeLayout>
</LinearLayout>

如果我将相对布局的layout_height设置为30dp,行高会变小。但这不应该是这样。

这是用于打开和关闭较小复选框的 .xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/cbon348" />
<item android:state_checked="false" android:drawable="@drawable/cboff348" />
</selector>

人们可能会认为图像的画布比图像本身大得多,但我向你保证,事实并非如此。

编辑:

我将代码简化为如下,仍然没有:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_
 android:layout_
 android:id="@+id/childlayout"
 android:orientation="horizontal">

            <TextView
                android:id="@+id/child_title"
                android:layout_
                android:layout_
                android:layout_gravity="center_vertical"
                    android:layout_marginLeft="50dp" 
                android:gravity="center_vertical"
                android:textColor="#000000"/>

        <CheckBox
            android:id="@+id/multiple_checkbox"
            android:layout_
                 android:layout_gravity="center_vertical"
                  android:gravity="center_vertical"
            android:layout_
            android:checked="true"
            android:layout_marginRight="10dp"
            android:button="@drawable/productlists_custom_cb"
            android:clickable="false"
            android:focusable="false"
            android:focusableInTouchMode="false" />

</LinearLayout>

【问题讨论】:

可能重复:***.com/questions/5487552/… 【参考方案1】:

我的解决方案是创建不同尺寸的复选框图像,然后根据屏幕尺寸设置适当的图像:

     if ((getResources().getConfiguration().screenLayout &  Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE)
     
        holder.checkBox.setButtonDrawable(R.drawable.productlists_custom_cb48);
     
     else if ((getResources().getConfiguration().screenLayout &  Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL)
     
         holder.checkBox.setButtonDrawable(R.drawable.productlists_custom_cb48);
     
     else if ((getResources().getConfiguration().screenLayout &  Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL)
     
         holder.checkBox.setButtonDrawable(R.drawable.productlists_custom_cb36);
     
     holder.checkBox.setLayoutParams(new android.widget.RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, GetDipsFromPixel(20)));

【讨论】:

【参考方案2】:

尝试在 textview 上使用负填充来减少空间。

android:paddingTop="-5dp"
android:paddingBottom="-5dp"

【讨论】:

这也适用于原始尺寸,使复选框相互重叠或靠得太近 我不明白,你的 statelist 没有改变文本大小,所以它必须是两个单独的列表。只需有两个单独的行布局。一种对较小的文本进行填充调整,另一种对较大的文本没有填充调整。

以上是关于如何减少列表视图项的高度的主要内容,如果未能解决你的问题,请参考以下文章

动态更改列表视图的分隔高度?

Bootstrap 3:减少列表组中列表组项的高度

反应原生平面列表如何强制列表项具有相同的高度?

Android:如何更改列表视图中列表项的背景颜色,由 SimpleCursorAdapter 管理

SwiftUI:如何让列表视图中的图像与列表项的操作不同?

如何在另一个列表视图中显示其各自组项的子项