0

次のXMLが機能しないことは知っていますが、これと同じ効果を実現する方法はありますか?

....
<LinearLayout
    android:layout_width="match_parent * 5"
    android:layout_height="match_parent" />
....

説明すると、私が達成しようとしている効果は、子レイアウトを親レイアウトのX倍のサイズにすることです。ここで、Xはフロートです。XMLの例では、5を使用しました。

これを使用して作成しようとしている効果は、ScrollViewのサイズをYにし、コンテンツビューのサイズをY*Xにすることです。

4

3 に答える 3

1

私の知る限り、XMLレイアウトでこれを実現する方法はありません。子ビューの高さを変更するために、アクティビティに次のコードを追加できます。androidがアクティビティのレイアウトを終了すると、ビューのサイズがわかることに注意してください。したがって、リスナーを追加して、レイアウトの準備が整い、すべてのサイズがわかっていることを知ることができます。私はSyedZahidAliに同意します。大きな子を小さな親に収めることはできませんが、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);
        }
    });
于 2012-11-28T20:42:03.897 に答える
0

どうすれば小さな親に子供を合わせることができますか、それはプログラミングを通してさえ不可能です。

必要に応じて、最初に親ビューに「wrap_content」プロパティが必要です。そうである場合、X*5を実行することはできません。

だから、あなたが言っていることは不可能です。

于 2012-11-28T20:37:19.897 に答える
0

親のサイズがわかっている場合は、子のlayout_widthにpx / dp / dip/spの値を指定できます。このアプローチはよりシンプルで、何かが爆発する可能性が少ないため、実際にこのアプローチをお勧めします。

それ以外の場合は、親ビューがonDraw()を呼び出した後、実際に幅/高さをピクセル単位で取得できます。getWidthとgetHeightはonWindowFocusChanged呼び出しで機能すると誰かが言いました。これは、以前にビューを測定するために正常に使用しました。

ただし、子ビューが親を測定している場合、子ビューが拡張される可能性があるため、混乱のリスクがあります。これにより、親が拡張する可能性があります(ただし、match_parentはこれを防ぐことができます)。次に、子のサイズを親よりも大きくなるようにサイズ変更してから、拡大した親のサイズを測定します。そのため、親よりも大きくしようとしている子のループに巻き込まれ、親は子を収容するようにサイズを変更し、子はさらに拡張します。

于 2012-11-28T21:51:49.493 に答える