Android RelativeLayout.getWidth在布局宽度为720时返回0

Android RelativeLayout.getWidth在布局宽度为720时返回0,android,android-relativelayout,Android,Android Relativelayout,我正在尝试学习android的基础知识,当我调用RelativeLayout.getWidth时,得到的值是0,而不是布局的预期大小 我的屏幕上有一个相对的图标: <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/activity_one> <TextView

我正在尝试学习android的基础知识,当我调用RelativeLayout.getWidth时,得到的值是0,而不是布局的预期大小

我的屏幕上有一个相对的图标:

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/activity_one>
   <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="test"
        android:id="@+id/test"/>
    </RelativeLayout >

我一定是犯了一个非常愚蠢的错误,但我看不出是什么。

你调用getWidth()/getHeight()太早了。UI尚未完全布局和调整大小。

如果我没记错的话,布局元素的宽度和高度等变量是在onCreate()方法之后设置的。
出现了一些类似的问题,并通过在应用程序逻辑流中的不同位置获取高度/宽度来修复这些问题

加载UI后,您应该在此处获取宽度,然后只能调用布局的宽度:

@Override
 public void onWindowFocusChanged(boolean hasFocus) {

  super.onWindowFocusChanged(hasFocus);
//paste your code to get your layout params.
 }

在调用
onMeasure
之前,不会设置宽度(此时实际测量尺寸,此方法依次调用
setMeasuredDimension

您可以为特定布局获取一个
ViewTreeObserver
对象,并实现
ViewTreeObserver.OnDrawListener
并将此实现传递给observer对象
addOnDrawListener
函数

获取此observer实现中的高度和宽度,并根据这些新值对任何其他视图项进行更改,这样即使布局高度和宽度将来会更改,所有内容也会保持一致。dude是否会更改方向


viewTreeObserver对象中还有很多其他事件,只要找到一个适合您需要的事件并向其写入侦听器即可。这里是ViewTreeObserver文档的链接

@Colin非常感谢我应该删除这篇文章吗?答案和问题总是可以按照上面的说明建立起来:谢谢:-)我不知道它在哪里可以找到,但我知道它在上可以找到,但我们在这里是为了互相帮助,没有更多。超好的信息,谢谢你的帮助和链接!更多要学习:)!
@Override
 public void onWindowFocusChanged(boolean hasFocus) {

  super.onWindowFocusChanged(hasFocus);
//paste your code to get your layout params.
 }