在Android中将ExpandableListView的指示器放在右侧

Posted

技术标签:

【中文标题】在Android中将ExpandableListView的指示器放在右侧【英文标题】:Put on the right the indicator of an ExpandableListView in Android 【发布时间】:2014-03-09 11:56:26 【问题描述】:

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

【问题讨论】:

你说的是箭头图吗? 是的,我说的是那个! 所有基于 layout:direction 的 XML 解决方案都可以在这里找到:***.com/a/38079569/4160084 这能回答你的问题吗? Expandable list view move group icon indicator to right 【参考方案1】:

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

android:alignParentRight = "true";

【讨论】:

我必须把箭头放在右边,而不是飞机!箭头是expandableListview的自定义图标..所以我不能改变它的位置:(【参考方案2】:

我不知道如何从 XML 中执行此操作,但我会告诉您一种在适配器中动态执行此操作的方法。

首先你必须从你的 xml 中删除组指示符

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

然后在您的父布局中,在布局的正确位置添加一个图像视图。

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

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);
    
  ...


【讨论】:

谢谢伙计,它的工作就像一个魅力家伙,只需执行它。 @Filnik 什么是groupHolder ?? ViewGroup 父级或 LayoutInflater 还是什么?? 它是组视图列表的持有者。例如,如果您的组视图包含文本视图和图像视图。那么组持有者类应该像 private static class GroupHolder ImageView img;文本视图文本视图; 这是迄今为止我见过的最干净的解决方案。【参考方案3】:

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

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

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

<?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) 然后使用以下详细信息创建 group_header.xml 布局,并在 ExpandableListAdapter.java 的 getGroupView() 方法中扩展此布局:

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

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

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

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

ivGroupIndicator.setSelected(isExpanded);

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

【讨论】:

你不会碰巧知道down_iconup_icon的android资源文件吧?【参考方案4】:

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

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

【讨论】:

【参考方案5】:

把它放到你的 xml 视图中:

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

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

您的文本视图父列表项:

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

例如。结果:

【讨论】:

以上是关于在Android中将ExpandableListView的指示器放在右侧的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在android中将音频合并到视频? [关闭]

在android中将形状背景设置为透明

无法在 Android 中将图像导出到 excel

在 Android 中将位图转换为灰度

如何在android中将图标转换为位图? [复制]

在android中将shape文件或OSM文件显示为地图