RecyclerView 的 CardView 中带有省略号的可扩展和可折叠 TextView
Expandable and Collapsible TextView with Ellipsis in a RecyclerView's CardView
以编程方式在 RecyclerView 的 CardView 中展开和折叠带有省略号 的 TextView 的最佳方法是什么?
例如:"...查看更多"
我正在寻找一些关于如何制作功能性可扩展和可折叠的“...查看更多”或“继续阅读”功能的指南,但我对其中的大多数都不满意,所以我想出了自己的我想与所有人分享它,尤其是那些使用 Firebase Recycler Adapter 来显示其数据的人。希望这对遇到我遇到的同样问题的人有所帮助。
您需要做的第一件事是将 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);
并传入必要的参数。传入 true
和 your_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 class 和 itemView
[=23 中全局声明的 TextView =]
@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);
}
以编程方式在 RecyclerView 的 CardView 中展开和折叠带有省略号 的 TextView 的最佳方法是什么?
例如:"...查看更多"
我正在寻找一些关于如何制作功能性可扩展和可折叠的“...查看更多”或“继续阅读”功能的指南,但我对其中的大多数都不满意,所以我想出了自己的我想与所有人分享它,尤其是那些使用 Firebase Recycler Adapter 来显示其数据的人。希望这对遇到我遇到的同样问题的人有所帮助。
您需要做的第一件事是将 CardView 的高度 设置为 wrap_content
。
之后的一切都将使用 Java.
以编程方式完成
接下来,将此方法放在扩展 RecyclerView.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);
并传入必要的参数。传入 true
和 your_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 class 和 itemView
[=23 中全局声明的 TextView =]
@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);
}