【发布时间】:2013-03-02 22:04:30
【问题描述】:
我想为每个代码动态设置 ScrollView 的 Height,因为我的 ScrollView 实际上比它应该高(底部空白)。
我的想法是,我可以获取 ScrollView 中所有控件的高度,总结它们,然后我可以将该高度设置为我的 ScrollView。
我尝试的是以下代码:
protected override void OnStart()
{
base.OnStart();
SetScrollViewSize();
}
private void SetScrollViewSize()
{
var root = FindViewById<ScrollView>(Resource.Id.root);
if (root != null)
{
var controls = GetSelfAndChildrenRecursive(root); //Gives me all Controls in the root (The ScrollView)
int heightOfAllControlsTogether = 0;
foreach (ViewGroup control in controls)
{
heightOfAllControlsTogether += control.Height;
}
ViewGroup.LayoutParams parameters = new ViewGroup.LayoutParams(root.Width, heightOfAllControlsTogether);
root.LayoutParameters = parameters;
}
}
Heights 和 MeasuredHeights 始终为 0(零) - (我知道它需要先渲染,但什么是正确的位置呢?)我什至不确定我的方法是否可行。
任何帮助将不胜感激!
【问题讨论】:
-
您到底是如何获得底部空间的(出于好奇,您是否对某些孩子使用布局重力)?在纯 java sdk 中,您可以在
onCreate方法中的一个视图上发布Runnable,或者使用类似scrollView.getViewTreeObserver().addGlobalLayoutListener() {/*calculate here*/}的内容。但我不知道单声道是如何工作的。 -
这个空间是因为我在我的 ScrollView 中使用了几个 ListViews。众所周知,不建议在 ScrollView 中使用 ListViews,但我确实需要它。我在这里使用此代码:stackoverflow.com/a/3495908/880472 它工作正常,但它在底部给了我奇怪的空间,这是我现在要解决的问题。
-
该问题的公认答案来自一位 Android SDK 工程师,他说您不应该这样做。无论如何,请检查该全局布局的单声道(我不使用单声道)。如果存在,则附加到视图,并且您应该具有正确的视图尺寸。
标签: android height xamarin.android scrollview