0

なぜこれが起こっているのかを理解するために、ここで非常に多くのスレッドを調べましたが、頭を包むことができません。

私のRelativeLayoutには、メニュー(alignedParentBottom)の上にある4つのHorizo​​ntalScrollViews(HSV)があります。

このメニューの上に4つのHSVを均等に配置したいと思います。

私の計算では、デバイスの高さを取得し、メニューの高さを減算してから4で割って、個々のHSVの高さを取得できるはずです。

ただし、各HSVの高さを設定すると、本来の高さよりも大きくなります。

(注:display.getHeight()は正しいサイズを返します。私は480x800デバイスを使用しており、deviceHeightを印刷すると800を返します)

これが私のコードです:

    RelativeLayout menuLayout = (RelativeLayout)findViewById(R.id.menuLayout);
    HorizontalScrollView row1 = (HorizontalScrollView)findViewById(R.id.row1);
    HorizontalScrollView row2 = (HorizontalScrollView)findViewById(R.id.row2);
    HorizontalScrollView row3 = (HorizontalScrollView)findViewById(R.id.row3);
    HorizontalScrollView row4 = (HorizontalScrollView)findViewById(R.id.row4);

    //get current device dimensions
    Display display = getWindowManager().getDefaultDisplay();
    deviceWidth = display.getWidth(); //returns 480
    deviceHeight = display.getHeight(); //returns 800

    int menuHeight = deviceWidth/5; // 480/5 = 96
    int remainingSpace = deviceHeight - menuHeight; // 800 - 96 = 704
    int rowHeight = (int) (remainingSpace/4); // 704/4 = 176

    menuLayout.getLayoutParams().height = menuHeight;

    row1.getLayoutParams().height = rowHeight;
    row2.getLayoutParams().height = rowHeight;
    row3.getLayoutParams().height = rowHeight;
    row4.getLayoutParams().height = rowHeight;

このコードを実行すると、各行が大きすぎて、下部のメニューの下にプッシュされます。getHeight()を実行した場合。1行では、正しい高さ(176)であると表示されますが、明らかにそうではありません(4行が大きすぎてメニューの上のスペースに収まらないため)。

誰かがこれに光を当てることができますか?どうもありがとう!

4

3 に答える 3

2

あなたは本当にここを使うべきLinearLayoutです。このandroid:layout_weight属性を使用して、パーセンテージを使用できます。物事が偶数の場合は、単に1を使用します。それ以外の場合android:weightSum="100"は、重みに整数(パーセンテージ)を設定して使用できます。

たとえばandroid:layout_weight="25"、親が。を持っている場合、25%の場合android:weightSum="100"

于 2012-08-13T01:44:14.233 に答える
0

ViewGroup.LayoutParamsネストされたサブクラスLayoutParamsの「定数フィールド値」publicstaticfinal int FILL_PARENT定数値:-1(0xffffffff)

ビューは親からパディングを差し引いたものと同じ大きさにする必要があると書かれていますが、サイズを変更した別のセットを含めるには、セット全体の境界となる親の中に別の「親」を配置する必要があります。

于 2012-08-13T01:04:21.643 に答える
0

デバイス画面の一部を占めるメニューバーが上部にあるとは考えていませんでした。私の解決策は、メインレイアウトの高さをfill_parentにしてから、メインレイアウトの高さを取得することです。display.getHeight()値の代わりに、この値を使用します。

于 2012-08-13T15:32:42.187 に答える