1

複数の画面サイズ/密度などのデザインを理解しようとしています。「dp」が私の答えだと思いましたが、思ったとおりに機能していません。

これが私がやろうとしていることです:

静的なままのメニュー項目用のヘッダーとフッターのセクションがあります。次に、2つの間にScrollViewがあります。ScrollView内には、さまざまな情報を表示するいくつかの「ブロック」があります。それらのブロックを常に画面の全幅に拡大してほしい。これらのブロックの高さを単純に適切にスケーリングして、適切な1:1-> height:widthスケールを維持する必要があります。また、TextViews / Images / Buttons / etcを拡大縮小して、ブロック内での位置を維持したいと思います。ブロックの高さが画面に対して大きくなりすぎる場合は、ScrollViewが役立ちます。ブロックがうまく収まる場合は、それでも問題ありません。私は主に幅に合わせて拡大縮小し、必要に応じてユーザーにスクロールさせたいと考えています。

現在、画面が広くなると、ブロックは非常に広くなりますが、それに合わせて高さを調整しません。

これが私のXMLレイアウトコードがどのように見えるかの基本的な(読みやすさのために簡略化された)要約です。また、各ブロックのサイズが異なる場合があることに注意してください。私は「25%を占める」解決策を探していません。ブロック内のレイアウトはかなり複雑で完全に異なります。

<LinearLayout>
    <RelativeLayout>Header stuff</RelativeLayout>

    <ScrollView> //height and width = match_parent width lower priority than header/footer

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="???" //Had been using a specified "dp" value but that didn't work like I thought. What goes here?
        >
                Block#1 with lots of TextViews, ImageViews and Buttons...etc
        </RelativeLAyout>

        <RelativeLayout>
                Block#2
        </RelativeLAyout>

        <RelativeLayout>
                Block#3... etc
        </RelativeLAyout>

    </ScrollView>

    <RelativeLayout>Footer stuff</RelativeLayout>

</LinearLayout>
4

1 に答える 1

0

ビューの「完全な」1:1の比率(または他の事前定義された比率)を実現する1つの方法は、ビューのカスタム拡張を作成し、onMeasure()メソッドをオーバーライドすることです。あなたの場合、次のようなメソッドをSquareRelativeLayout使用したい場合があります。onMeasure()

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    setMeasuredDimension(width, width);
}

編集:カスタム比率が必要な場合は、どこかで定義して、次のようにビューを測定できます。

float ratio = 0.5f;
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    setMeasuredDimension(width, ratio*width);
}

独自のxml属性を作成する方法を知っている場合は、ratio属性を追加してそこから取得できます。つまり、比率ごとに新しいビューを作成する必要はありません。

于 2012-04-14T19:13:19.997 に答える