0

コードごとにScrollViewの高さを動的に設定したいのですが、ScrollView が実際にはそれよりも高くなります (下部の空白)。

私の考えでは、ScrollView 内のすべての Controls の Heights を取得し、それらを合計してから、その Heights を 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 (ゼロ) - (最初にレンダリングする必要があることはわかっていますが、適切な場所は何でしょうか?) そして、私のアプローチが機能するかどうかさえわかりません。

どんな助けでも大歓迎です!

4

2 に答える 2

0

さて、その理由がわかりました。

背景グラフィックが高すぎました。それが下に空きスペースを作っていました。

于 2013-03-21T14:04:45.347 に答える
0

これは、Children の合計の高さに基づいてスクロールビューの高さを設定する例です。

private void setScrollViewHeightBasedOnChildren() {

int size = layoutRoot.getChildCount();
LinearLayout item = (LinearLayout) layoutRoot.getChildAt(0);
item.measure(0, 0);
int height = item.getMeasuredHeight();
//Reset size of ScrollView
scroll.setMinimumHeight(height / size);
scroll.invalidate();
}

詳細を参照してください: ScrollView の高さを子の合計高さに等しく設定します

于 2014-03-31T07:53:51.407 に答える