在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_icon
和up_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的指示器放在右侧的主要内容,如果未能解决你的问题,请参考以下文章