【问题标题】:Expandable and Collapsible TextView with Ellipsis in a RecyclerView's CardViewRecyclerView 的 CardView 中带有省略号的可扩展和可折叠 TextView
【发布时间】:2020-10-12 17:03:32
【问题描述】:

以编程方式在 RecyclerView 的 CardView 中展开和折叠 带省略号的 TextView 的最佳方法是什么?

例如:“...查看更多”

我一直在寻找一些关于如何制作可扩展和可折叠的功能性“...查看更多”或“继续阅读”功能的指南,但我对其中的大部分都不满意,所以我想出了自己的'想与大家分享,尤其是那些使用 Firebase Recycler Adapter 来显示他们的数据的人。希望这对遇到与我相同的问题的人有所帮助。

【问题讨论】:

    标签: firebase android-studio android-recyclerview textview android-cardview


    【解决方案1】:

    您需要做的第一件事是将CardView 的高度 设置为wrap_content
    之后的一切都将使用 Java 以编程方式完成。

    接下来,将此方法放在扩展 RecyclerView.ViewHolder 的 ViewHolder 中:

     private void Ellipsize(boolean activate, TextView textView){
    
            if (activate) {
                textView.setSingleLine(true);
                textView.setEllipsize(TextUtils.TruncateAt.END);
            }
            else{
                textView.setSingleLine(false);
                textView.setEllipsize(null);
            }
        }
    

    调用Ellipsize(boolean activate, TextView textView); 并传入必要的参数。传入trueyour_long_text_view 给它一个省略号。

    void setText(String text){
            TextView textTV = itemView.findViewById(R.id.TEXTVIEW_ID);
            textTV.setText(text);
            Ellipsize(true, textTV);
        }
    

    要为您的 TextView 提供展开和折叠功能,请在您的 ViewHolder 中添加此方法:
    isExpanded 的布尔值是 false 并且是全局声明的。

        private void ExpandCollapse(final TextView textView, final View view){
    
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(isExpanded) {
                        TransitionManager.beginDelayedTransition((ViewGroup) view.getRootView(), new AutoTransition());
                        Ellipsize(false, textView);
                    }
                    else{
                        TransitionManager.beginDelayedTransition((ViewGroup) view.getRootView(), new AutoTransition());
                        Ellipsize(true, textView);
                    }
                    isExpanded = !isExpanded;
                }
            });
    
        }
      
    

    添加所有必要的方法后,在 onBindViewHolder 中调用它们并传入在 ViewHolder 类中全局声明的 TextView 以及 itemView

     @Override
            protected void onBindViewHolder(@NonNull final ViewHolder holder, final int position, @NonNull final Model model) {
                holder.setText(model.getText());
                holder.ExpandCollapse(holder.textTV, holder.itemView);
    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-19
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 2019-08-16
      • 1970-01-01
      • 2020-10-21
      相关资源
      最近更新 更多