web-dev-qa-db-ja.com

ExpandableListView-親要素間にのみ仕切りを設定する方法

親要素の間にのみ仕切りを入れたい。設定したとき

Android:divider="@drawable/divider"
Android:childDivider="@color/transparent"
Android:dividerHeight="0dp"

親要素の間に仕切りを設定したいのですが、子要素の間に仕切りや空白を入れたくありません。

それを行う方法のアイデア??

19
Plamen Nikolov

展開可能なリストの親の間ではなく、子ビューからのみ仕切りを削除するには:

追加 Android:childDivider="#00000000" XMLのExapandableListView属性内:

<ExpandableListView
    Android:id="@+id/elv"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:childDivider="#00000000" />

詳細は このページ を参照してください

25
Amala Ray

仕切りの色とその高さを指定します(仕切りはグループが折りたたまれているときに表示されます)

<ExpandableListView
        Android:id="@+id/list"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:divider="@color/color_black"
        Android:dividerHeight="1dp"
        Android:groupIndicator="@null" />
5
Ravi Yadav

秘訣は、折りたたみグループレイアウトと最後の子レイアウト用に追加のviewを作成することです。

collapse_group.xml:

<LinearLayout
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:background="@Android:color/transparent">

    <TextView
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:textSize="17sp"/>

    <!-- this is the extra view-->  
    <View 
       Android:layout_width="fill_parent"
       Android:layout_height="10dp"
       Android:background="@Android:color/transparent"/>        

</LinearLayout>

expanded_group.xml:

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:background="@Android:color/transparent">

    <TextView
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:textSize="17sp"/>

    <!-- no extra view-->       

</LinearLayout>

同じ方法を子ビューに適用し、最後の子ビューには追加のビューを挿入します

4
ferry

私が行ったことは、ExpandableListViewのディバイダーを0に設定し、「divider」グループをそのExpandableListAdapterに挿入することでした。

// To get dividers between the groups we add 'divider views' as if they were  
// themselves groups.
public int getGroupCount() {
// Actual groups are at even groupPositions, dividers at odd
    return (this.data.size() * 2) - 1;
}

public long getGroupId(int groupPosition) {
    if(groupPosition % 2 != 0) return R.id.divider;
    else return R.id.group;
}

public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    if(groupPosition % 2 != 0) {
        View divider = convertView;
        if(divider == null || divider.getId() != R.id.divider) {
            divider = this.inflater.inflate(R.layout.divider, null);
        }

        return divider;
    }

    View group = convertView;
    if(group == null || group.getId() != R.id.group) {
        group = this.inflater.inflate(R.layout.group, null);
    }

    return group;
}
1
MZamkow

子ディバイダーのみを削除する場合、1つの簡単な方法は、子アイテムの背景色と同じ色のドローアブルを作成できることです。次に、子ディバイダーとして設定します。

ShapeDrawable sd1 = new ShapeDrawable(new RectShape());
    sd1.getPaint().setColor(YOUR CHILD ITEM BACKGROUND COLOR);
    mExpListView.setChildDivider(sd1);

またはxmlを使用:

Android:childDivider="@color/child_bg_color"
1
Amit
expListView.setDividerHeight(10);
expListView.setChildDivider(getResources().getDrawable(
            Android.R.color.white));
1
Dhiraj Himani

以下に示すように、ヘッダーと子アイテムに2つのビューを追加して解決しました。

Header.xml

<?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">

<RelativeLayout
Android:id="@+id/rl_header"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/square_box"
Android:padding="@dimen/padding_10">

<ImageView
    Android:id="@+id/expandableIndicator"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignParentRight="true"
    Android:layout_centerVertical="true"
    Android:src="@drawable/ic_downarrow" />
</RelativeLayout>

<View
Android:id="@+id/view_hidden"
Android:layout_width="match_parent"
Android:layout_height="10dp"
Android:layout_below="@+id/rl_header"
Android:background="@Android:color/transparent" />
</RelativeLayout>

child.xml

<?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">

<RelativeLayout
Android:id="@+id/rl_childView"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/square_box"
Android:padding="@dimen/padding_10">

<TextView
    Android:id="@+id/tv_startDate"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignParentLeft="true"
    Android:layout_centerVertical="true"
    Android:gravity="left"
    Android:paddingTop="@dimen/padding_5"
    Android:paddingBottom="@dimen/padding_5"
    Android:text="Start Date \nSep. 23, 2019"
    Android:textSize="@dimen/text_16" />

<ImageView
    Android:id="@+id/iv_arrow"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignParentRight="true"
    Android:layout_centerVertical="true"
    Android:src="@drawable/right_arrow" />
</RelativeLayout>

<View
    Android:id="@+id/view_hidden"
    Android:layout_width="match_parent"
    Android:layout_height="10dp"
    Android:layout_below="@+id/rl_childView"
    Android:background="@Android:color/transparent" />
</RelativeLayout>

次に、このコードをアダプタクラスに追加します。アイデアは、グループが展開/縮小されたときにビューを表示/非表示にし、最後の子アイテムに表示することです。

@Override
public View getGroupView(int listPosition, boolean isExpanded, View convertView, 
ViewGroup parent) {
String listTitle = (String) getGroup(listPosition);
String listCount = "(" + getChildrenCount(listPosition) + ")";

if (convertView == null) {
    LayoutInflater layoutInflater = (LayoutInflater) 
this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = layoutInflater.inflate(R.layout.expandable_header, null);
}
View view_hidden = convertView.findViewById(R.id.view_hidden);

if (isExpanded) {
    view_hidden.setVisibility(View.GONE);
} else {
    view_hidden.setVisibility(View.VISIBLE);
}

return convertView;
}

@Override
public View getChildView(int listPosition, final int expandedListPosition,
                     boolean isLastChild, View convertView, ViewGroup parent) {
final Medication medication = (Medication) getChild(listPosition, 
expandedListPosition);
if (convertView == null) {
    LayoutInflater layoutInflater = (LayoutInflater) 
this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = layoutInflater.inflate(R.layout.expandable_item, null);
}

View view_hidden = convertView.findViewById(R.id.view_hidden);
if (isLastChild) {
    view_hidden.setVisibility(View.VISIBLE);
} else {
    view_hidden.setVisibility(View.GONE);
}

return convertView;
}
0
RakeshGupta

ExpandableListView(Header)の親要素の間に仕切りを置き、子と親の間に仕切りを置きたくない場合(明らかに最も自然なケースです)、次のことを行う必要があります。

  1. 親xmlファイルで、必要な仕切りの高さと仕切りの色を使用して、レイアウトの下部にビューを1つ追加します。例:

  2. 子xmlファイルでも同じことを行います。必要な仕切りの高さと仕切りの色を使用して、レイアウトの下部にビューを1つ追加します。仕切りの色と高さが親xmlと同じであることを確認してください。

  3. ExpandableListViewアダプターメソッドで、パブリックビューgetGroupView(int groupPosition、boolean isExpanded、View convertView、ViewGroup parent)は、次のようにビューディバイダーの状態を管理します。例:

    if(isExpanded){headerDividerView.setBackgroundColor(ContextCompat.getColor(context、R.color.darker_grey)); } else {headerDividerView.setBackgroundColor(ContextCompat.getColor(context、Android.R.color.transparent)); }

ところで:私の場合、R.color.darker_greyは親の背景色です

  1. ExpandableListView xmlからすべての仕切りと仕切りの高さを削除します。 ExpandableListViewに仕切りと仕切りの高さがないようにします。次のようにattrsを使用できます。

    Android:groupIndicator = "@ null" Android:childIndicator = "@ null" Android:divider = "@ null" Android:dividerHeight = "0dp"

0
Stoycho Andreev