我使用ContentLayout
创建布局(wrap_content
)。
我想在其上方显示与LoadingLayout
相同大小的加载布局(ContentLayout
)。
像这样:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout.
android:id="@+id/ContentLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
...
</LinearLayout>
<RelativeLayout
android:id="@+id/LoadingLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
...
</RelativeLayout>
</RelativeLayout>
但是当我希望在LoadingLayout
中设置onMeasure
尺寸时,它将仅以第二次机会设置为正确尺寸。
只能这样:
活动
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) loadingLayout.getLayoutParams();
params.height = getMeasuredHeight();
loadingLayout.setLayoutParams(params);
super.onMeasure(widthMeasureSpec, heightMeasureSpec); // android realignment hack
}
我认为这是一个黑客攻击。你有更好的解决方案吗?
答案 0 :(得分:0)
如果我理解正确,您需要LoadingLayout
来保持ContentLayout
<RelativeLayout
android:id="@+id/LoadingLayout"
android:layout_alignLeft="@id/ContentLayout"
android:layout_alignRight="@id/ContentLayout"
....>
....
</RelativeLayout>
编辑:以下是高度的一种方式
您可以在全局刷新发生时添加一次性侦听器。然后将提供所有尺寸。
// in your activity
@Override
protected void onCreate(Bundle state) {
final View loading = findViewById(R.id.LoadingLayout);
final View content = findViewById(R.id.ContentLayout);
content.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
content.getViewTreeObserver().removeOnGlobalLayoutListener(this);
loading.getLayoutParams().height = content.getHeight();
loading.onRequestLayout();
loading.invalidate();
}
}
}