需要两个TextView 来实现,
<LinearLayout
android:id="@+id/ll"
android:layout_width="0dp"
app:layout_constraintHorizontal_weight="1"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginLeft="@dimen/dp_12"
android:layout_marginRight="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_12"
android:maxLines="1"
android:ellipsize="end"
app:layout_constraintLeft_toRightOf="@id/card"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/season"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:ellipsize="end"
android:textSize="@dimen/sp_11"
android:textColor="#FFFFFF"
android:textStyle="bold"
android:text="时令"
android:background="@drawable/bg_lushe_8"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_2"
android:text="褚橙 云南冰糖橙 一级果5kg"
android:textColor="@color/black"
android:textSize="@dimen/sp_15"
android:textStyle="bold" />
</LinearLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_replenish"
android:layout_width="0dp"
app:layout_constraintHorizontal_weight="1"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/ll"
app:layout_constraintLeft_toRightOf="@id/card"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginLeft="@dimen/dp_12"
android:layout_marginRight="@dimen/dp_12"
android:ellipsize="end"
android:maxLines="1"
android:visibility="visible"
android:text="褚橙 云南冰糖橙 一级果5kg"
android:textColor="@color/black"
android:textSize="@dimen/sp_15"
android:textStyle="bold" />
同一个 字符串 先复制 获取行数内容 再进行分割 getFirstLine 第一行内容 getMultipleLines 多行行内容
public String getFirstLine(TextView tvBrief) {
String text = tvBrief.getText().toString();
Layout layout = tvBrief.getLayout();
String summary = "";
int start = 0;
int end=layout.getLineEnd(0);
summary = text.substring(start, end);
return summary;
}
public String getMultipleLines(TextView tvBrief, int maxLine) {
String text = tvBrief.getText().toString();
Layout layout = tvBrief.getLayout();
String summary = "";
int start = layout.getLineEnd(0);
int end;
for (int i = 1; i < maxLine; i++) {
end = layout.getLineEnd(i);
summary = summary + text.substring(start, end);
start = end;
}
return summary;
}
判断与实现
holder.binding.title.post(() -> {
if(holder.binding.title.getLineCount()>1) {
holder.binding.titleReplenish.setVisibility(View.VISIBLE);
String S = getMultipleLines(holder.binding.title, holder.binding.title.getLineCount());
holder.binding.titleReplenish.setText(S);
holder.binding.title.setText(getFirstLine(holder.binding.title));
}else {
holder.binding.titleReplenish.setVisibility(View.GONE);
}
});