Android - 动态添加的 TextView 的占位符

Android - Placeholder for dynamically added TextView

在我的应用程序中,我有一个内部 Relativelayout,左侧有 2 个图像按钮(后退按钮和帮助按钮),右侧有 2 个图像按钮(前进按钮和信息按钮)和一个文本视图。

问题是当用户进行测验时,文本是动态设置的。有 2 种可能的文本(见图片)。

如您所见,错误答案的文本是此 Textview 的最大字符长度。我的目标是对图像按钮进行固定定位。 但我不想为 Texview 设置固定宽度。我认为有更好的解决方案。

实现此目标的最佳方法是什么?

编辑:

这是我的内部Relativelayout:

<RelativeLayout
    android:id="@+id/layout_progressbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginTop="20dp"
    android:layout_toEndOf="@+id/iv_image"
    android:layout_toRightOf="@+id/iv_image"
    android:gravity="bottom"
    android:orientation="horizontal" >

    <ImageButton
        android:id="@+id/bt_next"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:enabled="false"
        android:src="@drawable/ic_arrow_right"
        android:text="@string/bt_next" />

    <ImageButton
        android:id="@+id/bt_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@+id/tv_resultmessage"
        android:layout_toLeftOf="@+id/bt_next"
        android:layout_toRightOf="@+id/tv_resultmessage"
        android:layout_toStartOf="@+id/bt_next"
        android:background="@null"
        android:src="@drawable/ic_info" />

    <TextView
        android:id="@+id/tv_resultmessage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true" />

    <ImageButton
        android:id="@+id/bt_praxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@+id/bt_back"
        android:layout_toLeftOf="@+id/tv_resultmessage"
        android:layout_toRightOf="@+id/bt_back"
        android:layout_toStartOf="@+id/tv_resultmessage"
        android:background="@null"
        android:src="@drawable/ic_praxis" />

    <ImageButton
        android:id="@+id/bt_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:src="@drawable/ic_arrow_left"
        android:text="@string/bt_back" />

    <ProgressBar
        android:id="@+id/pb_quiz"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/bt_back"
        android:padding="5dp"
        android:progress="1" />
</RelativeLayout>

试试这个。

    <ImageButton
    android:id="@+id/bt_next"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:enabled="false"
    android:src="@drawable/ic_arrow_right"
    android:text="@string/bt_next" />

<ImageButton
    android:id="@+id/bt_info"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@+id/bt_next"
    android:layout_toStartOf="@+id/bt_next"
    android:layout_marginEnd = "8dp"
    android:background="@null"
    android:src="@drawable/ic_info" />

<TextView
    android:id="@+id/tv_resultmessage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true" />

<ImageButton
    android:id="@+id/bt_praxis"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@+id/bt_back"
    android:layout_toRightOf="@+id/bt_back"
    android:layout_marginStart = "8dp"
    android:background="@null"
    android:src="@drawable/ic_praxis" />

<ImageButton
    android:id="@+id/bt_back"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:src="@drawable/ic_arrow_left"
    android:text="@string/bt_back" />

<ProgressBar
    android:id="@+id/pb_quiz"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/bt_back"
    android:padding="5dp"
    android:progress="1" />

layout_toRightOflayout_toLeftOf设置为TextView。 并从 ImageView 中删除 android:layout_toEndOf="@+id/tv_resultmessage" 等。

像这样:

<RelativeLayout
        android:id="@+id/layout_progressbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginTop="20dp"
        android:layout_toEndOf="@+id/iv_image"
        android:layout_toRightOf="@+id/iv_image"
        android:gravity="bottom"
        android:orientation="horizontal">

    <ImageButton
            android:id="@+id/bt_next"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:enabled="false"
            android:src="@drawable/ic_arrow_right"
            android:text="@string/bt_next"/>

    <ImageButton
            android:id="@+id/bt_info"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/bt_next"
            android:layout_toStartOf="@+id/bt_next"
            android:layout_marginRight="16dp"
            android:background="@null"
            android:src="@drawable/ic_info"/>

    <TextView
            android:id="@+id/tv_resultmessage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/bt_praxis"
            android:layout_toLeftOf="@+id/bt_info"
            android:layout_centerHorizontal="true"/>

    <ImageButton
            android:id="@+id/bt_praxis"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toEndOf="@+id/bt_back"
            android:layout_toRightOf="@+id/bt_back"
            android:layout_marginLeft="16dp"
            android:background="@null"
            android:src="@drawable/ic_praxis"/>

    <ImageButton
            android:id="@+id/bt_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:src="@drawable/ic_arrow_left"
            android:text="@string/bt_back"/>

    <ProgressBar
            android:id="@+id/pb_quiz"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/bt_back"
            android:padding="5dp"
            android:progress="1"/>
</RelativeLayout>

您可以使用 LinearLayout 作为父级而不是 RelativeLayout 来实现相同的效果。只需将中间的 TextView 的 layout_weight 设为 1 即可。对于其余组件,请不要指定任何重量,如果需要,您可以提供适当的边距。这样,无论文本长度如何,TextView 都将保持相同的宽度。与使用 RelativeLayout 相比,此方法将更具可读性并且具有更少的 xml 标签。