web-dev-qa-db-ja.com

AndroidのExpandableListViewのインジケーターを右側に配置します

example

インジケーターを左から右に移動する必要があります(平面画像のため)。 expandableviewlistがアクティビティ全体ではなくフラグメント内にあるため、私も成功できませんでした。何か案が?ありがとう!

29
Filnik

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

}
119
Ahmed Zayed

もう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が適切に機能します。お役に立てれば。

13
user1182217

プログラムでインジケーターを適切に配置する別のソリューション:

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

ここで、expandableListViewExpandableListviewです

3
Badr At