我在相对布局中有一个ImageView和3个TextViews,需要根据图像的大小在运行时定位文本视图。目前我在图像上使用ViewTreeObserver,以便我可以使用它的宽度/高度来定位文本框。
一切正常,只是TextViews在加载时跳转到正确的位置,使其看起来像闪烁。
有没有办法在屏幕渲染之前重新定位TextViews但是一旦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);
答案 0 :(得分: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>