0

我在相对布局中有一个 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);
4

1 回答 1

0

我假设您希望您TextView位于ImageView. 这是实现它的方法,您现在可以添加边距TextView以调整其位置。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relativeLayoutMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageView
    android:id="@+id/myImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:adjustViewBounds="true"
    android:scaleType="fitStart"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true" 
    android:text="..." />

</RelativeLayout>
于 2013-07-08T10:32:23.793 回答