可扩展列表视图指示器如何显示标题高度?

6
我正在使用一个可扩展的列表视图,其中组指示器显示在列表的右侧,我的标题名称是单行的,输出如下图所示。在上面的图片中,我的指示器看起来很好。但在下面的图片中,我的指示器看起来不好,它会扩展。为什么会这样呢?以下是我的代码:
    mExpandableList = (ExpandableListView)findViewById(R.id.expandable_list);
    mExpandableList.setIndicatorBounds(width - GetPixelFromDips(40), width - GetPixelFromDips(10)); 

xml is

     <ExpandableListView
    android:id="@+id/expandable_list"        
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:groupIndicator="@drawable/group_indicator" />

group_indicator.xml is

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/arrow_down"     android:state_expanded="true"/>
    <item android:drawable="@drawable/arrow_up"/>
</selector>

有人有想法帮忙解决这个问题吗?……

你在使用哪种布局来分组项目? - AlexBcn
@AlexBcn 线性布局。 - NagarjunaReddy
4个回答

2

我用了一种更复杂的方法来解决这个问题,但它有效:

可扩展列表的布局文件片段:

<ExpandableListView
  android:id="@+id/accordion"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:groupIndicator="@android:color/transparent"
  android:scrollbars="none" >
</ExpandableListView>
  • 列表组元素的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/accordion_main_background"
    android:minHeight="50dip"
    android:orientation="vertical"
    android:padding="@dimen/screenPromoTaskRootPadding" >

    <TextView
        android:id="@+id/accordionTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginRight="10dip"
        android:layout_toLeftOf="@+id/accordionIndicator"
        android:background="@color/accordionOrangeBackColor"
        android:paddingLeft="2dip"
        android:paddingRight="2dip"
        android:textColor="@color/blackTextColor"
        android:textSize="@dimen/accordMainTextSize" />

    <ImageView
        android:id="@+id/accordionIndicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:src="@drawable/arrow_up_np" />

</RelativeLayout>

在Activity中,adaptedDataCollection只是一个包含ExpandableListAdapter数据的列表。这也是手风琴实现的片段,因此当选择一个列表组后,其他元素将折叠。

ExpandableListView accordion = (ExpandableListView) findViewById(R.id.accordion);
accordion.setOnGroupClickListener(this);

@Override
public boolean onGroupClick(ExpandableListView paramExpandableListView, View paramView, int paramInt, long paramLong) {
    ImageView icon=(ImageView)paramView.findViewById(R.id.accordionIndicator);
    for (int i = 0; i < adapterDataCollection.size(); i++) {
        if (i == paramInt) {
            if (paramExpandableListView.isGroupExpanded(i)) {
                paramExpandableListView.collapseGroup(i);
                icon.setImageResource(R.drawable.arrow_up_np);
            } else {
                paramExpandableListView.expandGroup(i);
                icon.setImageResource(R.drawable.arrow_down_np);
            }
        } else {
            paramExpandableListView.collapseGroup(i);
            icon.setImageResource(R.drawable.arrow_up_np);
        }
    }
    paramExpandableListView.invalidate();
    return true;
}

2
您应该使用9 patch图像来显示箭头。您可以参考下面的图片。 right_arrow_9_patch_image 对于向下的箭头,您可以使用下面的图片。 down_arrow_9_patch_image 请不要忘记在图像名称后添加".9",例如"your_image_name.9.png"。

非常有帮助的答案! - Michael Osofsky

1
您可以通过使用[layer-list] http://developer.android.com/guide/topics/resources/drawable-resource.html#LayerList来设置指示器的高度。请注意,不要删除HTML标签。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:bottom="2dp"
        android:drawable="@drawable/shrink"
        android:top="2dp"/>

</layer-list>

选择器

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/layer_shrink" android:state_expanded="true"/>

0
在你的自定义组布局文件custom_group_layout.xml中,查看你在adapterClass的getGroupView()方法中填充的视图。你的指示器视图可能有一个fill_parent属性,这就是为什么当你的组包含更多文本行时,你的项会拉伸其图标的原因。 一个例子

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接