如何设置ExpandableListView的指示器图标的宽度和高度?

时间:2011-05-19 06:05:42

标签: android expandablelistview

我已经使用选择器为我的ExpandableListView设置了指示器图标,但我的折叠和展开图标被调整大小以匹配原始指示器图标的大小(比我的图标大)。 任何人都知道如何设置指标图标的大小(宽度和高度)? 谢谢!

4 个答案:

答案 0 :(得分:11)

  

这肯定会有效:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_empty="true">
     <layer-list>
        <item
            android:left="0dp"
            android:right="3dp"
            android:top="20dp"
            android:bottom="20dp"
            android:drawable="@drawable/down_indication">
        </item>
     </layer-list>
   </item>

   <item android:state_expanded="true">
     <layer-list>
        <item
            android:left="0dp"
            android:right="3dp"
            android:top="20dp"
            android:bottom="20dp"
            android:drawable="@drawable/up_indication">
        </item>
     </layer-list>
   </item>

</selector>

答案 1 :(得分:8)

无论您将指标的尺寸设置为什么,列表视图布局的组指标容器都有一个match_parent用于高度,因此您的指标将始终被拉伸。

我的工作是:

(1)将组指示器设置为空

(2)在组布局中包含我的自定义组指示符。

(3)让groupClickListener更改指标的状态。

代码段:

(1)mListView.setGroupIndicator(null);

(2)我的指标包含在组布局中。

<ImageView
    android:id="@+id/help_group_indicator"
    android:layout_width="@dimen/help_group_indicator_dimension"
    android:layout_height="@dimen/help_group_indicator_dimension"
    android:layout_marginTop="@dimen/help_group_indicator_dimension"
    android:src="@drawable/down_icon" />

(3)

    mListView.setOnGroupClickListener(new OnGroupClickListener() {
        @Override
        public boolean onGroupClick(ExpandableListView parent, View clickedView, int groupPosition, long rowId) {
            ImageView groupIndicator = (ImageView) clickedView.findViewById(R.id.help_group_indicator);
            if (parent.isGroupExpanded(groupPosition)) {
                parent.collapseGroup(groupPosition);
                groupIndicator.setImageResource(R.drawable.down_icon);
            } else {
                parent.expandGroup(groupPosition);
                groupIndicator.setImageResource(R.drawable.up_icon);
             }
            return true;
        }
    });

@Satheesh建议的答案将起作用,但前提是所有的groupView都具有相同的高度。如果您的组布局已经说过,将text和wrap_content包装为高度,则高度可能会根据您的内容而有所不同,并且您设置的填充可能不再有效。

答案 2 :(得分:0)

您是否将背景可绘制设置为图标的正确高度?如果它使用默认的背景drawable,你将获得默认图标的高度/宽度,即使你的drawables更小。

答案 3 :(得分:0)

如果组布局中的指示器图标旁边有TextView,您还可以执行以下操作:

(1)在ExpandableListView的XML布局中,删除groupIndicator:

android:groupIndicator="@null"

(2)在自定义ExpandableListAdapter的getGroupView(...)方法中,为TextView设置左drawable:

int leftIcon=R.drawable.ic_noexpand;
if (isExpanded) leftIcon=R.drawable.ic_expand;
lblListHeader.setCompoundDrawablesWithIntrinsicBounds(
    ContextCompat.getDrawable(_context,leftIcon),null,null,null);

(如果min API> = 21,则可以使用Context而不是ContextCompat)

(3)在XML组布局中设置android:paddingLeft="0dp",因为指标图标的空间现在将为空