假设我们有一个main_activity.xml布局,该布局以相对方式定义所有维度-约束,百分比和准则(即百分比)...没有“静态” dp。
但是在MainActivity.java中,我们以编程方式创建了一些子视图,并且我们希望相对于现有视图定义它们的高度/宽度尺寸。
我们不知道设备的尺寸或密度,因此也不知道运行时之前任何视图的(实际整数)尺寸...
但是我们可以这样说:
int heightDimensionForNewView = (int) (someAlreadyInflatedView.getHeight() / 7f)
但是如果在某些情况下需要在应用启动时立即显示这些“新”视图怎么办?
所以,这个问题:
在Android Activity生命周期中,什么时候可以(以某种方式)安全地查询(某种方式)实际/最终/保证的布局尺寸的最早时间是什么时候?那是什么东西,又是什么?
我无法找到诸如“ onContentViewInflated()”之类的替代方法,并且没有像Fragments中那样的onCreateView()方法。
我还尝试了从onStart()和onResume()内部进行记录,但是维度结果始终为“ 0”,大概是因为它们还没有被夸大。
我知道任何给定的View都可以在onMeasure()中获得其自己的尺寸,但是您将在MainActivity中创建一个静态变量,以便对其进行分配并从那里使用它...或者通过某种方式发送该信息从“视图”返回到“活动”。
我想念什么?我只是想能够以某种方式从MainActivity内部获取该数字。
答案 0 :(得分:1)
我的建议是:
@Override
public void onResume() {
super.onResume();
getActivity().setOnToggledlistener(this); //register callback
}
和
view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
int oldWidth = oldRight - oldLeft; // right exclusive, left inclusive
if( v.getWidth() != oldWidth ) {
// width has changed
}
}
});