In my recyclerview item, i need to check whether a textview is ellipsized or not. Based on this condition, I need to do some logic. This is my item layout xml code:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_list_item_root_view"
style="@style/ClickableRectanglePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:paddingTop="13.5dp"
android:paddingBottom="14.5dp">
<ImageView
android:id="@+id/activity_list_item_contact_image"
android:layout_width="@dimen/ui_size_xl_2"
android:layout_height="@dimen/ui_size_xl_2"
tools:ignore="ContentDescription"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/activity_list_item_name"
style="@style/activity_list_item_name_v2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center_vertical|start"
android:text="ABC India Pvt. Ltd."
tools:ignore="HardcodedText"
app:layout_constraintStart_toEndOf="@+id/activity_list_item_contact_image"
app:layout_constraintEnd_toStartOf="@+id/activity_list_item_amount"
app:layout_constraintTop_toTopOf="@+id/activity_list_item_contact_image"
android:layout_marginStart="12dp"
android:layout_marginEnd="4dp"/>
<TextView
android:id="@+id/activity_list_item_date"
style="@style/activity_list_item_details"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical|start"
android:text="Yesterday"
tools:ignore="HardcodedText"
app:layout_constraintTop_toBottomOf="@id/activity_list_item_name"
app:layout_constraintStart_toEndOf="@id/activity_list_item_contact_image"
android:layout_marginStart="12dp"
android:layout_marginTop="4dp"/>
<TextView
android:id="@+id/activity_list_item_dot_text"
style="@style/activity_list_item_details"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical|start"
android:text=" \u00b7 "
tools:ignore="HardcodedText"
app:layout_constraintStart_toEndOf="@id/activity_list_item_date"
app:layout_constraintTop_toBottomOf="@id/activity_list_item_name"
android:layout_marginTop="4dp"/>
<ImageView
android:id="@+id/activity_list_item_status_icon"
android:layout_width="@dimen/ui_size_xs"
android:layout_height="@dimen/ui_size_xs"
android:layout_marginEnd="6dp"
android:scaleType="fitXY"
tools:ignore="ContentDescription"
app:srcCompat="@drawable/ui_purchase_protection_alt"
app:layout_constraintStart_toEndOf="@id/activity_list_item_dot_text"
app:layout_constraintTop_toBottomOf="@id/activity_list_item_name"
android:layout_marginTop="4dp"/>
<TextView
android:id="@+id/activity_list_item_status_text"
style="@style/activity_list_item_details"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center_vertical|start"
android:text="Request Received"
tools:ignore="HardcodedText"
android:ellipsize="end"
android:maxLines="1"
app:layout_constraintStart_toEndOf="@id/activity_list_item_status_icon"
app:layout_constraintTop_toBottomOf="@id/activity_list_item_name"
app:layout_constraintEnd_toStartOf="@id/activity_list_item_amount"
android:layout_marginEnd="4dp"
android:layout_marginTop="4dp"/>
<TextView
android:id="@+id/activity_list_item_status_spillover_text"
style="@style/activity_list_item_details"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center_vertical|start"
android:text="Request Received"
tools:ignore="HardcodedText"
android:visibility="gone"
tools:visibility="visible"
app:layout_constraintTop_toBottomOf="@id/activity_list_item_date"
app:layout_constraintStart_toEndOf="@id/activity_list_item_contact_image"
android:layout_marginStart="12dp"
android:layout_marginTop="4dp"/>
<TextView
android:id="@+id/activity_list_item_amount"
style="@style/UiTextView.Xl.Regular"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center|end"
android:text="$149.99"
android:textColor="?attr/ui_v2_color_grey_600"
android:textSize="18sp"
tools:ignore="HardcodedText"
app:layout_constraintTop_toTopOf="@id/activity_list_item_contact_image"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Now, I want to check whether this textview activity_list_item_status_text is ellipsized or not, and if it is ellipsized, show the textview in the third line activity_list_item_status_spillover_text. If not, hide it. I used TreeObserver to check this. Here's the code inside the ViewHolder:
TextView statusTextView = binding.activityListItemStatusText;
statusTextView.getViewTreeObserver().addOnDrawListener(() -> {
Layout layout = statusTextView.getLayout();
if (layout != null) {
int lines = layout.getLineCount();
if (layout.getEllipsisCount(lines - 1) > 0) {
binding.activityListItemStatusSpilloverText.setVisibility(View.VISIBLE);
}else {
binding.activityListItemStatusSpilloverText.setVisibility(View.GONE);
}
}
});
This code works fine when I open the recyclerview. But, when I scroll the recyclerview, for some items, this condition layout.getEllipsisCount(lines - 1) > 0 becomes true even though the text is not ellipsized and the activity_list_item_status_spillover_text is getting visible. Its like text is getting ellipsized during scroll. I am not able to figure out why this is happening. Is there any issue with the code?
from Why for some recyclerview items, textview ellipsize check returns true during recyclerview scroll even if its false?

No comments:
Post a Comment