I want to change the position of the default arrow that appears in the Group view of the ExpandableListView. I want it to be to the right instead of being to the left.
how can this be done ?
I want to change the position of the default arrow that appears in the Group view of the ExpandableListView. I want it to be to the right instead of being to the left.
how can this be done ?
Use setIndicatorBounds:
Sets the drawing bounds for the indicators (at minimum, the group indicator is affected by this; the child indicator is affected by this if the child indicator bounds are set to inherit).
Actually there is a simple way.
Edit your XML related to the group view like this:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="35dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/videos_explist_groupname"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/videos_group_indicator"
android:gravity="center"
android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
android:textAppearance="?android:attr/textAppearanceListItem" />
<ImageView
android:id="@+id/videos_group_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/videos_chevron_collapsed" />
</RelativeLayout>
See how the ImageView
is on the right of the TextView
.
Edit your ExpandableListAdapter
as follows:
@Override
public View getGroupView(final int groupPosition, final boolean isExpanded, final View convertView, final ViewGroup parent) {
View v;
if (convertView == null) {
v = newGroupView(isExpanded, parent);
} else {
v = convertView;
}
bindView(v, mGroupData.get(groupPosition), mGroupFrom, mGroupTo);
((ImageView) v.findViewById(R.id.videos_group_indicator))
.setImageResource(isExpanded?R.drawable.videos_chevron_expanded:R.drawable.videos_chevron_collapsed);
return v;
}
As you can see you can easily set the drawable corresponding to the group state.
I know the question was asked a long time ago, but this may help somebody.
android:groupIndicator="@null"
–
Akin Use setIndicatorBounds:
Sets the drawing bounds for the indicators (at minimum, the group indicator is affected by this; the child indicator is affected by this if the child indicator bounds are set to inherit).
Try this
expList = getExpandableListView();
metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
width = metrics.widthPixels;
//this code for adjusting the group indicator into right side of the view
expList.setIndicatorBounds(width - GetDipsFromPixel(50), width - GetDipsFromPixel(10));
And the GetDipsFromPixel
is here
public int GetDipsFromPixel(float pixels)
{
// Get the screen's density scale
final float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based on density scale
return (int) (pixels * scale + 0.5f);
}
if you want to change the position indicator from the left to right side you need to add android:layoutDirection= "rtl"
. but the position of list change to the right side.
the example code is look like this
<ExpandableListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"
android:layoutDirection="rtl"
/>
There is no direct way to do this.
mIndicatorLeft and mIndicatorRight are the two fields in ExpandableListView class that handle the location of the indicator icon and they are private fields. Unfortunately the position of indicator is not set in a neatly defined Layout as expected, but is determined on dispatchDraw() in the ExpandableListView. A rectangle is drawn using the top/bottom and the mIndicatorRight and mIndicatorLeft values, the indicator icon is drawn in this Rect. You must change the position of this Rect obj named 'indicatorRect' to move your indicator icon.
To get an idea of things you can see this example http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html Change the value of textView padding to 0 in getGenericView() in the example, you will see that the indicator will overlap the text.
Your only option is to get the source code of ExpandableListView and set these mIndicatorRight and mIndicatorLeft values yourself by setting the mIndicatorRight as item.getRight() and mIndicatorLeft as item.getRight() - 'your icon size'.
© 2022 - 2024 — McMap. All rights reserved.