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_toRightOf
、layout_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 标签。
在我的应用程序中,我有一个内部 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_toRightOf
、layout_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 标签。