0

大きなテーブル画像を持つAndroidアプリのデザインがあります(下のA、B画面を参照)。これは、必要なすべてのサイズ(mdpi、hdpi、xhdpi)の画像としてAとBがすでにあることを意味します。 ここに画像の説明を入力

私の問題は、AIの内部にスクロールビューまたはアイテムのリストを配置する必要があることですが、それらをAイメージより大きくしたくないということです。私の現在のレイアウトは次のようなものです:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background">

    <RelativeLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        // Some elements here

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        // Some elements here

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="center_horizontal">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/A_background"/>

        <ScrollView
            android:id="@+id/scrollview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <LinearLayout
                android:id="@+id/scrollview_container"
                android:orientation="vertical"
                android:gravity="center_horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"/>
        </ScrollView>
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="center_horizontal">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/B_background"/>
    </RelativeLayout>

</LinearLayout>

スクロールビューに多くのアイテムがある場合、A が拡大します。画像がぼやけているため、A を以前と同じ高さにする必要があります。

4

2 に答える 2

1

これらの場合、私は通常、1 つのビュー (この場合は ImageView) を MeasureSpec.UNSPECIFIED で測定し、もう 1 つのビュー (あなたの場合は ScrollView) を MeasureSpec.EXACTLY または MeasureSpec.AT_MOST (必要に応じて) で測定するカスタム ビューを作成することになります。 )。線に沿った何か:

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

    // measure view 1
    View view1 = findViewById(R.id.view1);
    view1.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.UNSPECIFIED));
    int view1Height = view1.getMeasuredHeight();

    // check measured height against MeasureSpec and adapt accordingly
    int heightMsrSpec = MeasureSpec.getMode(heightMeasureSpec);
    switch (heightMsrSpec) {
    case MeasureSpec.AT_MOST: view1Height = Math.min(height, view1Height); break;
    case MeasureSpec.EXACTLY: view1Height = height; break;
    case MeasureSpec.UNSPECIFIED: break;
    }

    // measure view2
    View view2 = findViewById(R.id.view2);
    view2.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(view1Height, MeasureSpec.EXACTLY));
    int view2Height = view2.getMeasuredHeight();

    setMeasuredDimension(width, Math.min(view1Height, view2Height) + getPaddingTop() + getPaddingBottom());
}
于 2013-02-22T12:55:26.773 に答える
0

まあAは画像の背景ですが、これが正しいxmlファイルであると確信していますか?画像ビュー内にスクロールビューを追加することはできず、その中にもありません

あなたができることは、次のような異なる res/layout フォルダーを作成することです

res/layout-small
res/layout-large
res/layout-xlarge
res/layout-sw600
res/layout-sw720

それらにレイアウトファイルを配置し、それらの画像に応じて、そこにある A & B に絶対的な高さを与えます。

この方法では伸びず、すべての画面サイズで見栄えが良くなります。

于 2013-02-22T12:44:54.493 に答える