インジケーターを左から右に移動する必要があります(平面画像のため)。 expandableviewlistがアクティビティ全体ではなくフラグメント内にあるため、私も成功できませんでした。何か案が?ありがとう!
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);
}
...
}
もう1つのソリューションは次のとおりです。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_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>
3)ExpandableListAdapter.JavaクラスのgetGroupView()メソッドで、次を設定するだけです。
ivGroupIndicator.setSelected(isExpanded);
このアプローチでは、down_iconとup_iconが適切に機能します。お役に立てれば。
プログラムでインジケーターを適切に配置する別のソリューション:
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
です