可伸缩布局展开收起

需要用到三方依赖:    implementation 'com.google.android:flexbox:2.0.1'
使用的是其中的 FlexboxLayoutManager 布局管理器

public class FloorView extends LinearLayout {
private Context context;
private View widgetView;
private RecyclerView recyclerView;
private MyAdapter myAdapter;
private boolean isVis = true;//是否需要隐藏显示
private List<String> listAll = new ArrayList<>();
private List<String> listFirstLine = new ArrayList<>();

public FloorView(Context context) {
    this(context, null);
}

public FloorView(Context context, @Nullable AttributeSet attrs) {
    this(context, attrs, -1);
}

public FloorView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    this.context = context;
    widgetView = inflate(context, R.layout.widget_indicator_floor_view, this);
    initRecylerView();
}

private void initRecylerView() {
    recyclerView = widgetView.findViewById(R.id.rv_list);
    //设置flexbox
    FlexboxLayoutManager layoutManager = new FlexboxLayoutManager(context);
    //        layoutManager.setFlexDirection(FlexDirection.ROW);
    //        layoutManager.setJustifyContent(JustifyContent.FLEX_END);
    recyclerView.setLayoutManager(layoutManager);
    myAdapter = new MyAdapter();
    myAdapter.setListData(listAll);
    recyclerView.setNestedScrollingEnabled(false);
    recyclerView.setAdapter(myAdapter);
}

public void addDisplayItem(List<String> lists, boolean isVis) {
    this.isVis = isVis;
    if (lists == null) {
        return;
    }
    listAll.clear();
    listAll.addAll(lists);
    Log.e("FloorView", "listAll.size():" + listAll.size());
    myAdapter.setListData(listAll);
    myAdapter.notifyDataSetChanged();
}

//限制展示数量  点击展开  num是最多展示的数量
public void addDisplayItem(List<String> lists, int num) {
    if (lists == null) {
        return;
    }
    listAll.clear();
    listAll.addAll(lists);
    listFirstLine.clear();
    listFirstLine.addAll(lists);
    if (lists.size() > num) {
        listFirstLine = listFirstLine.subList(0, num);
        listFirstLine.set(num - 1, "....");
        //setArrow(true);
        myAdapter.setListData(listFirstLine);
        myAdapter.notifyDataSetChanged();
    } else {
        myAdapter.setListData(listAll);
        myAdapter.notifyDataSetChanged();
    }
}

//展开或者折叠的箭头
public void setArrow(boolean isDown) {
    if (isDown) {
        myAdapter.setListData(listAll);
        myAdapter.notifyDataSetChanged();
    } else {
        //ivArrow.setImageResource(R.drawable.arrow_up);
        myAdapter.setListData(listFirstLine);
        myAdapter.notifyDataSetChanged();
    }
}

/**
 * 用内部类来写adapter
 */
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<String> contents;

    public void setListData(List<String> lists) {
        this.contents = lists;
    }

    //创建新View,被LayoutManager所调用
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_floor, viewGroup, false);
        ViewHolder vh = new ViewHolder(view);
        return vh;
    }

    //将数据与界面进行绑定的操作
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, final int position) {
        viewHolder.mTextView.setText(contents.get(position));
        if (isVis) {
            if (viewHolder.mTextView.getText().toString().length() > 7) {
                viewHolder.mTextView.setMaxEms(6);
                viewHolder.mTextView.setMaxLines(1);
                viewHolder.mTextView.setEllipsize(TextUtils.TruncateAt.END);
            } else {
                viewHolder.mTextView.setMaxEms(viewHolder.mTextView.getText().toString().length() + 1);
                viewHolder.mTextView.setMaxLines(1);
            }
        }
        viewHolder.mTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (contents.get(position).equals("....")) {
                    setArrow(true);
                } else if (contents.get(position).equals("收起")) {
                    setArrow(false);
                }
            }
        });
    }

    //获取数据的数量
    @Override
    public int getItemCount() {
        return contents.size();
    }

    //自定义的ViewHolder,持有每个Item的的所有界面元素
    class ViewHolder extends RecyclerView.ViewHolder {

        TextView mTextView;

        ViewHolder(View view) {
            super(view);
            mTextView = view.findViewById(R.id.tv);
        }
    }
}
}
//下面是简单地布局文件
widget_indicator_floor_view

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/rv_list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:overScrollMode="never"/>

// 适配器 item_floor

<TextView
    android:id="@+id/tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="1dp"
    android:layout_marginRight="5dp"
    android:layout_marginTop="5dp"
    android:gravity="center"
    android:paddingLeft="6dp"
    android:paddingTop="3dp"
    android:paddingRight="6dp"
    android:paddingBottom="3dp"
    android:text="标题"
    android:textColor="#4a90e2"
    android:textSize="12sp" />
//使用实例
int num=7;
       List<String> stringList = new ArrayList<>();
    if (dataBeanList.get(position).getTagList() != null && dataBeanList.get(position).getTagList().size() > 0) {
        stringList.addAll(dataBeanList.get(position).getTagList());
        if (dataBeanList.get(position).getTagList().size() > num-1) {
            stringList.add("收起");
        }
    }
    holder.floorView.addDisplayItem(stringList, num);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值