0

我有一个 FrameLayout,它是 TextView 的包装器。TextView 可以是具有动态修改文本的两个 TextView 对象之一。我想在 FrameLayout 中包含的文本的右侧立即添加一个图像。我尝试了两件事:

我在 RelativeLayout 中设置了 FrameLayout。我添加了一个 ImageView:

<RelativeLayout>
<!-- Two TextViews Here -->
<FrameLayout
  android:id="@+id/my_frame_layout"
  android:layout_width="match_parent"
  ...
/>
<ImageView
  android:id="@+id/my_image_view"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_toRightOf="@id/my_frame_layout"
  />
</RelativeLayout>

这在第一次加载布局时起作用。但是,当 FrameLayout 中包含的文本发生变化时,图像停留在其最初计算的位置,而不是重新计算停留在 TextView 的右侧。

所以我试着让它成为一个可绘制的并在代码中设置它。我获取了 FrameLayout 中的 TextView,并调用:

setCompoundDrawablesWithIntrinsicBounds(0,0,myDrawable,0)

这很好用,除了可绘制对象始终位于 FrameLayout 的最右侧,尽管 TextView 仅半满。我希望图像立即位于文本的右侧。

有没有人有任何其他建议我可以尝试实现这一点?

4

1 回答 1

0

我最终将 ImageView 包装在一个额外的 LinearLayout 中,如下所示:

<LinearLayout
  android:id="@+id/my_image_wrapper"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:layout_toRightOf="my_frame_layout"
  android:gravity="left|center_vertical"
  >
  <ImageView
    android:id="@+id/my_image_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
  />
</LinearLayout>

与单独的 ImageView 不同,LinearLayout 在文本更改大小时重绘,所以这对我有用。

于 2013-10-15T18:42:08.733 回答