在Android中右键显示ExpandableListView的指示器

时间:2014-02-11 15:37:58

标签: android android-fragments expandablelistview

example

我必须将指示器从左向右移动(因为平面图像)。我也无法成功,因为expandableviewlist位于片段内,而不是整个活动内。任何的想法?谢谢!

5 个答案:

答案 0 :(得分:116)

我不知道如何通过XML实现这一目标,但我会告诉您在适配器中动态执行此操作的方法。

首先,您必须从xml中删除组指示符

 <ExpandableListView [...] 
    android:groupIndicator="@null" />

然后在您的父级布局中,在布局的正确位置添加一个imageview。

然后在您的自定义适配器中执行以下操作

public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
  ...

    if (isExpanded) {
        groupHolder.img.setImageResource(R.drawable.group_down);
    } else {
        groupHolder.img.setImageResource(R.drawable.group_up);
    }
  ...

}

答案 1 :(得分:12)

另一个解决方案是: 1)首先将ExpandableListView中的groupIndicator设置为@null:

namedtuple

2)然后创建group_indicator.xml文件,其中包含以下详细信息:

<ExpandableListView [...] 
    android:groupIndicator="@null" />

3)然后使用以下详细信息创建group_header.xml布局,并在ExpandableListAdapter.java的getGroupView()方法中扩充此布局:

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

3)在ExpandableListAdapter.java类的getGroupView()方法中,只需设置以下内容:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp">

    <TextView
        android:id="@+id/tvHeader"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:textColor="@color/white"
        android:layout_centerVertical="true"
        android:textSize="16sp"/>

    <ImageView
        android:id="@+id/ivGroupIndicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/group_indicator"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"/>
</RelativeLayout>

使用这种方法,你的down_icon和up_icon将正常工作。 希望这会有所帮助。

答案 2 :(得分:3)

另一种将指标以编程方式放在右侧的解决方案:

expandableListView = (ExpandableListView) findViewById(R.id.expandableListView);

        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width = size.x;
        Resources r = getResources();
        int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                50, r.getDisplayMetrics());
        if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
            expandableListView.setIndicatorBounds(width - px, width);
        } else {
            expandableListView.setIndicatorBoundsRelative(width - px, width);
        }

其中expandableListView是您的ExpandableListview

答案 3 :(得分:3)

将其放入您的xml视图:

<ExpandableListView
...
android:layoutDirection="rtl" />

您可以根据自己的喜好在布局项目中设置文字标题的重度。

您的文本视图父级列表项:

<TextView
...
android:gravity="center"/>

例如结果:

enter image description here

答案 4 :(得分:-12)

在groupcustom.xml文件中,您可以使用Relativelayout并将该图像放入

android:alignParentRight = "true";