0

这是我今天早些时候问的问题: Recreate shape as in xml file by using code and set width programmatically

使用提供的上述解决方案,我能够获得所需的结果,但有一个小问题我无法弄清楚。请帮我。

矩形框应该包裹文本视图,无论其文本长度是多少。但是当内容比同一视图中的其他文本长时,就会显示间隙。

这是在回收器视图中加载的布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:id="@+id/lin1"
    android:weightSum="2">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/rel1"
        android:layout_marginLeft="5dp"
        android:layout_weight="1.50">
        <TextView
            android:id="@+id/list"
            android:textSize="@dimen/grid_row_text_size"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minWidth="100dp"
            android:textColor="@color/orange"
            android:textAlignment="center"
            android:singleLine="true"
            android:layout_marginRight="3dp"
            android:gravity="center">

        </TextView>

    </RelativeLayout>

    <ImageView
        android:id="@+id/info_icn"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_alignParentBottom="true"
        android:src="@drawable/eye"
        android:visibility="gone"
        android:layout_weight="0.50"
        android:layout_gravity="bottom"

        />

</LinearLayout>

这是我现在得到的结果

有关该问题的更多信息,请查看上述另一张图片

这是我在更改顶部线性布局后得到的结果 (android:layout_width="match_parent")

如果需要更多代码,我可以在这里发布。请在这个问题上帮助我。非常感谢!

4

1 回答 1

0

矩形框应该包裹文本视图,无论其文本长度是多少。但是当内容比同一视图中的其他文本长时,就会显示间隙。

要使 TextView 包装其内容,您必须对 RecyclerView 项目布局进行一些更改:

  1. RelativeLayout (@+id/rel1)android:layout_width="match_parent" 并且必须是 wrap_content。
  2. TextView (@+id/list)android:layout_width="match_parent" 并且必须是 wrap_content。
  3. TextView (@+id/list)android:minWidth="100dp" 这会影响 TextView 在内容太小时时包裹到其内容。

我已将您的 xml 布局修改为 Wrap 到其内容,如下例所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lin1"
    android:layout_width="wrap_content"
    android:layout_height="100dp"
    android:background="@android:color/transparent"
    android:orientation="horizontal">

    <RelativeLayout
        android:id="@+id/rel1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:layout_gravity="center"
        android:layout_marginStart="5dp"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp">

        <TextView
            android:id="@+id/list"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="@dimen/grid_row_text_size"
            android:text="Test text"
            android:gravity="center"
            android:layout_centerInParent="true"
            android:textColor="@android:color/holo_orange_dark"
            android:background="@android:color/transparent"
            android:textAlignment="center"
            android:singleLine="true"
            android:paddingTop="10dp"
            android:paddingBottom="10dp"
            android:paddingStart="5dp"
            android:paddingEnd="5dp"/>

    </RelativeLayout>

    <ImageView
        android:id="@+id/info_icn"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:src="@drawable/eye"
        android:visibility="gone"
        android:layout_gravity="bottom" />

</LinearLayout>

根据您的问题,TextView 具有矩形形状作为背景,并带有 Cut TopRightCorner。使用 ShapeAppearanceModel 以编程方式添加 TextView 背景后,您应该得到您想要的结果,如下所示:

结果图像

于 2021-07-29T14:37:05.247 回答