RelativeLayout.getWidth 当布局宽度为 720 时返回 0
RelativeLayout.getWidth returning 0 when layout width is 720
我正在尝试学习 android 的基础知识,当我调用 RelativeLayout.getWidth 时,我得到的值是 0,而不是布局的预期大小。
我有一个 RelativeLayout 填充我的屏幕:
<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 >
但是当我在 oncreate() 中使用下面的代码时,我得到的是 0 而不是预期的屏幕宽度 720。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one);
RelativeLayout rl= (RelativeLayout) findViewById(R.id.activity_one);
TextView tempTextview = (TextView) findViewById(R.id.test);
tempTextview.setText("W: " + rl.getWidth() + " - H:" + rl.getHeight());
}
我一定是犯了一个非常愚蠢的错误,但我看不出是什么。
您调用 getWidth() / getHeight() 太早了。 UI 尚未完全布局和调整大小。
如果我没记错的话,布局元素的宽度和高度等变量是在 onCreate() 方法之后设置的。
有一些类似的问题并通过将 height/width 置于应用程序逻辑流程中的不同位置来解决它们
当您的UI加载完成后,您应该在此处获取宽度,然后只能调用布局的宽度。:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
//paste your code to get your layout params.
}
在调用 onMeasure
之前不会设置宽度(这是实际测量尺寸并且此方法依次调用 setMeasuredDimension
时)。
您可以获得特定布局的 ViewTreeObserver
对象并实现 ViewTreeObserver.OnDrawListener
并将此实现传递给观察者对象 addOnDrawListener
函数,
获取此观察器实现中的高度和宽度,并根据这些新值更改您想要的任何其他视图项目,这样即使布局高度和宽度将来可能发生变化,一切都保持一致取向改变?
viewTreeObserver 对象中还有许多其他事件,只需找到一个适合您需要的事件并为其编写侦听器即可。这是 ViewTreeObserver http://developer.android.com/reference/android/view/ViewTreeObserver.html
文档的 link
我正在尝试学习 android 的基础知识,当我调用 RelativeLayout.getWidth 时,我得到的值是 0,而不是布局的预期大小。
我有一个 RelativeLayout 填充我的屏幕:
<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 >
但是当我在 oncreate() 中使用下面的代码时,我得到的是 0 而不是预期的屏幕宽度 720。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one);
RelativeLayout rl= (RelativeLayout) findViewById(R.id.activity_one);
TextView tempTextview = (TextView) findViewById(R.id.test);
tempTextview.setText("W: " + rl.getWidth() + " - H:" + rl.getHeight());
}
我一定是犯了一个非常愚蠢的错误,但我看不出是什么。
您调用 getWidth() / getHeight() 太早了。 UI 尚未完全布局和调整大小。
如果我没记错的话,布局元素的宽度和高度等变量是在 onCreate() 方法之后设置的。 有一些类似的问题并通过将 height/width 置于应用程序逻辑流程中的不同位置来解决它们
当您的UI加载完成后,您应该在此处获取宽度,然后只能调用布局的宽度。:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
//paste your code to get your layout params.
}
在调用 onMeasure
之前不会设置宽度(这是实际测量尺寸并且此方法依次调用 setMeasuredDimension
时)。
您可以获得特定布局的 ViewTreeObserver
对象并实现 ViewTreeObserver.OnDrawListener
并将此实现传递给观察者对象 addOnDrawListener
函数,
获取此观察器实现中的高度和宽度,并根据这些新值更改您想要的任何其他视图项目,这样即使布局高度和宽度将来可能发生变化,一切都保持一致取向改变?
viewTreeObserver 对象中还有许多其他事件,只需找到一个适合您需要的事件并为其编写侦听器即可。这是 ViewTreeObserver http://developer.android.com/reference/android/view/ViewTreeObserver.html
文档的 link