美文网首页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