美文网首页Android开发
ExpandableListView 修改默认的箭头并且根据组的

ExpandableListView 修改默认的箭头并且根据组的

作者: 你的益达233 | 来源:发表于2021-12-24 11:00 被阅读0次

首先控件是没有提供api修改的,只能自己想办法
思路:去掉默认,在item的textview中自己根据条件判断显示

效果图:

效果图.png

步骤1:去掉默认的

<ExpandableListView
    android:id="@+id/expandable_listview"
    android:layout_width="130dp"
    android:layout_height="wrap_content"
    android:layout_below="@+id/linearLayout"
    android:layout_alignParentRight="true"
    android:layout_marginRight="20dp"
    android:groupIndicator="@null"
    />

关键android:groupIndicator="@null"

步骤2:group_item.xml

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/button_select">
        <TextView
        android:id="@+id/group_item_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="4dp"
        android:gravity="center"
        android:text="父标题"
        android:textColor="#fff"
        android:textSize="16sp"
        android:layoutDirection="ltr"
        />
    </LinearLayout>

步骤3:在adapter中处理

public View getGroupView(int parentPosition, boolean isExpandable, View concertView, ViewGroup viewGroup) {
    GroupViewHolder groupViewHolder = null;
    if(concertView == null) {//如果重用视图不存在则创造,如果存在则重用,提高加载效率
        concertView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.group_item,viewGroup,false);
        groupViewHolder = new GroupViewHolder();
        groupViewHolder.groupTextView = concertView.findViewById(R.id.group_item_text);
        concertView.setTag(groupViewHolder);
    }
    groupViewHolder = (GroupViewHolder) concertView.getTag();
    groupViewHolder.groupTextView.setText(groupItems[parentPosition]);
    if (childItems[parentPosition].length > 1){
        if (isExpandable){
            groupViewHolder.groupTextView.setCompoundDrawablesWithIntrinsicBounds(viewGroup.getContext().getResources().getDrawable(R.mipmap.icon_bottom_arrow),null,null,null);
        } else {
            groupViewHolder.groupTextView.setCompoundDrawablesWithIntrinsicBounds(viewGroup.getContext().getResources().getDrawable(R.mipmap.icon_top_arrow),null,null,null);
        }
    } else {
        groupViewHolder.groupTextView.setCompoundDrawablesWithIntrinsicBounds(null,null,null,null);
    }

    return concertView;
}  

关键代码if (childItems[parentPosition].length > 1)这个判断

步骤4:代码中使用

expandableListView = findViewById(R.id.expandable_listview);
    String[] groupItems = {"   查看定位信息", "   查看方向信息", "界面设置", "标记点功能", "查看功能", "离线地图", "关于我们"};
    String[][] childItems = {{"  查看定位信息"},
            {"  查看方向信息"},
            {"  界面设置"},
            {"  添加标记点", "  删除标记点", "  擦除轨迹"},
            {"  查看历史轨迹", "  删除历史轨迹"},
            {"  离线地图"},
            {"  关于我们"}};

    MyExpandableListViewAdapter adapter = new MyExpandableListViewAdapter(MainActivity.this, groupItems, childItems);
    expandableListView.setAdapter(adapter);  

办法是人想出来。。

相关文章

网友评论

    本文标题:ExpandableListView 修改默认的箭头并且根据组的

    本文链接:https://www.haomeiwen.com/subject/uhslqrtx.html