我知道以下XML 不有效,但有没有办法达到同样的效果?
....
<LinearLayout
android:layout_width="match_parent * 5"
android:layout_height="match_parent" />
....
为了解释,我试图实现的效果是使子布局X的大小与其父布局相同,其中X是浮点数。在XML示例中,我使用了5.
我尝试使用此功能创建的效果是让ScrollView为Y尺寸,并使其内容视图的大小为Y * X.
答案 0 :(得分:1)
据我所知,无法通过XML布局实现这一目标。您可以在活动中添加以下代码,以便更改子视图的高度。请注意,一旦android完成了活动布局,就会知道视图的大小。因此,您可以添加一个侦听器,以了解布局何时准备好以及所有大小都已知。我同意Syed Zahid Ali的说法,你不能让更大的孩子适合较小的父母,但就ScrollView而言,这段代码应该有效:
final ViewGroup parentView = findViewById(R.id.parentView);
final View childView = parentView.findViewById(R.id.childView);
parentView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
float parentHeight = parentView.getHeight();
ViewGroup.LayoutParams params = childView.getLayoutParams();
params.height = (int)(parentHeight * 5);
childView.setLayoutParams(params);
//We want the listener to be called only the first time(in case it is initialized in onCreate())
parentView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
});
答案 1 :(得分:0)
如何让孩子适应较小的父母,即使通过编程也是如此。
如果你想这样,首先是你的父视图必须具有“wrap_ content”属性,如果是,则你不能做X * 5的事情。
所以,你所说的是不可能的。
答案 2 :(得分:0)
如果您知道父级大小,您可以在layout_width中为子级指定px / dp / dip / sp值。我实际上会推荐这种方法,因为它更简单,并且你可能不会爆炸。
否则,在父视图调用onDraw()之后,您实际上可以获得以像素为单位的宽度/高度。有人说getWidth和getHeight适用于onWindowFocusChanged调用,我之前成功地用它来测量视图。
你确实冒了一团糟,因为如果一个子视图正在测量父视图,那么子视图可以扩展,从而为你提供父扩展的机会(尽管match_parent可能会阻止这种情况)。然后,您将子项的大小调整为大于父项,然后测量父项的大小,该大小已扩展。所以,你会陷入一个孩子的循环中,试图比父母更大,而父母正在调整大小以适应孩子,孩子会进一步扩展。