親要素の間にのみ仕切りを入れたい。設定したとき
Android:divider="@drawable/divider"
Android:childDivider="@color/transparent"
Android:dividerHeight="0dp"
親要素の間に仕切りを設定したいのですが、子要素の間に仕切りや空白を入れたくありません。
それを行う方法のアイデア??
展開可能なリストの親の間ではなく、子ビューからのみ仕切りを削除するには:
追加 Android:childDivider="#00000000"
XMLのExapandableListView
属性内:
<ExpandableListView
Android:id="@+id/elv"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:childDivider="#00000000" />
詳細は このページ を参照してください
仕切りの色とその高さを指定します(仕切りはグループが折りたたまれているときに表示されます)
<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" />
秘訣は、折りたたみグループレイアウトと最後の子レイアウト用に追加の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>
同じ方法を子ビューに適用し、最後の子ビューには追加のビューを挿入します
私が行ったことは、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つの簡単な方法は、子アイテムの背景色と同じ色のドローアブルを作成できることです。次に、子ディバイダーとして設定します。
ShapeDrawable sd1 = new ShapeDrawable(new RectShape());
sd1.getPaint().setColor(YOUR CHILD ITEM BACKGROUND COLOR);
mExpListView.setChildDivider(sd1);
またはxmlを使用:
Android:childDivider="@color/child_bg_color"
expListView.setDividerHeight(10);
expListView.setChildDivider(getResources().getDrawable(
Android.R.color.white));
以下に示すように、ヘッダーと子アイテムに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;
}
ExpandableListView(Header)の親要素の間に仕切りを置き、子と親の間に仕切りを置きたくない場合(明らかに最も自然なケースです)、次のことを行う必要があります。
親xmlファイルで、必要な仕切りの高さと仕切りの色を使用して、レイアウトの下部にビューを1つ追加します。例:
子xmlファイルでも同じことを行います。必要な仕切りの高さと仕切りの色を使用して、レイアウトの下部にビューを1つ追加します。仕切りの色と高さが親xmlと同じであることを確認してください。
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は親の背景色です
ExpandableListView xmlからすべての仕切りと仕切りの高さを削除します。 ExpandableListViewに仕切りと仕切りの高さがないようにします。次のようにattrsを使用できます。
Android:groupIndicator = "@ null" Android:childIndicator = "@ null" Android:divider = "@ null" Android:dividerHeight = "0dp"