Android 图文混排

121 阅读1分钟

image.png

需要两个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);
    }
});