我在相对布局中有一个 ImageView 和 3 个 TextView,需要在运行时根据图像的大小定位文本视图。目前我在图像上使用 ViewTreeObserver 以便我可以使用它的宽度/高度来定位文本框。
一切正常,除了 TextViews 在加载时跳转到正确的位置,使它看起来像有闪烁。
有没有办法在屏幕呈现之前重新定位 TextView,但是一旦 ImageView 设置了它的宽度和高度?
这是 XML 代码的(简化)版本:
<RelativeLayout
android:id="@+id/relativeLayoutMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/myImage"
android:src="@drawable/myImageSrc"
android:adjustViewBounds="true"
android:scaleType="fitStart"
android:layout_alignParentStart="true"/>
<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="..."
android:layout_alignLeft="@+id/myImage"
android:layout_alignTop="@+id/myImage"/>
</RelativeLayout>
这是我在 addOnGlobalLayoutListener 回调中使用的代码,用于在运行时定位文本视图:
RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayoutMain);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
int width = relativeLayout.getMeasuredWidth();
int height = relativeLayout.getMeasuredHeight();
TextView tv = (TextView) findViewById(R.id.myTextView);
int w = tv.getMeasuredWidth();
int h = tv.getMeasuredHeight();
layoutParams.setMargins((int) (width * 0.5 - w / 2), (int) (height * 0.54 - h / 2), 0, 0);
tv.setLayoutParams(layoutParams);