好的,这是我的问题我想创建一个滚动视图,它可以填充到屏幕底部的一组两个按钮。知道我不能只设置滚动视图来填充父级我以为我会去获得线性布局的高度,其中包含按钮,然后是我设置为填充父级的滚动视图的高度。然后从另一个中减去一个,然后重置滚动视图高度。我想出了如何获取和设置滚动视图高度。我找到了一种方法可以测量活动中的所有其他视图,但是使用这个视图它总是返回零,我不知道如何获得它的高度。
final LinearLayout tv = (LinearLayout)findViewById(R.id.thebuttons);
ViewTreeObserver vto = tv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
Integer grr = tv.getHeight();
Log.e("the h", grr.toString());
ViewTreeObserver obs = tv.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
}
});
现在,如果我将它设置为我的任何其他布局,我会按照我的预期得到它的高度,但是将它设置为这个,我得到0;这就是我要测量的那个!我也试过直接测量按钮无济于事
<LinearLayout
android:id="@+id/thebuttons"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5sp"
>
<Button
android:id="@+id/saveit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save" />
<Button
android:id="@+id/clearit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save" />
</LinearLayout>
答案 0 :(得分:12)
我终于把它弄清楚了 如果窗口小部件没有出现在屏幕上,则不会创建它们。因此按钮元素仍处于零,因为它们从未呈现过;并且它们从未呈现过,因为滚动视图将它们推离屏幕。 我这次从另一个角度攻击了这个问题我所做的就是将滚动视图设置为一个任意的小数字,这样按钮就停留在屏幕上,将顶层布局的大小存储到“int totalsize”,然后我得到除了滚动视图之外的所有元素的大小,并获得每个视图的边距,并将它们全部合计为“int used”,然后我将滚动视图高度设置为“totalsize-used”,这就是有效的。发现它我手动累加了边距,当屏幕尺寸改变时不起作用,边距也会发生变化,因此发现它们以及视图尺寸效果最佳。
在我的on create方法中,我得到了这个:
final Button tv = (Button)findViewById(R.id.saveit);
ViewTreeObserver vto = tv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
ViewGroup.MarginLayoutParams vlp = (MarginLayoutParams) tv.getLayoutParams();
int btnsize =tv.getMeasuredHeight()+vlp.topMargin;
sizeit(btnsize);
ViewTreeObserver obs = tv.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
}
});
然后它的功能
private void sizeit(Integer thebuttons)
{
View v = findViewById(R.id.viewmain);
int total = v.getHeight();
v = findViewById(R.id.view1);
ViewGroup.MarginLayoutParams vlp = (MarginLayoutParams) v.getLayoutParams();
int used=v.getHeight()+vlp.topMargin;
v = findViewById(R.id.view2);
vlp = (MarginLayoutParams) v.getLayoutParams();
used+=v.getHeight()+vlp.topMargin;
v = findViewById(R.id.fonttext);
vlp = (MarginLayoutParams) v.getLayoutParams();
used+=v.getHeight()+vlp.topMargin;
v = findViewById(R.id.infolabel);
vlp = (MarginLayoutParams) v.getLayoutParams();
used+=v.getHeight()+vlp.topMargin;
Integer scrsize=total-used-thebuttons;
v = findViewById(R.id.scrview);
ScrollView scr = (ScrollView)findViewById(R.id.scrview);
ViewGroup.LayoutParams scrlprams = scr.getLayoutParams();
scrlprams.height=scrsize;
scr.setLayoutParams(scrlprams);
}
希望这可以帮助某人同时解决同样的问题