0

アプリのインターフェイスを、ヘッダー、コンテンツ、フッターの 3 つの領域に分けました。ヘッダーのサイズは固定 (画像は 1 つだけ) ですが、フッターとコンテンツのサイズは可変です。

より高い解像度のデバイスでは、画面にヘッダーとフッターを挿入し、コンテンツ領域用に空きスペースを確保することを考えました. 低解像度のデバイスでは、コンテンツの長さを可能な限り短くし (wrap_content のようなもの)、フッターを下に挿入することを考えました (ユーザーがフッターを表示するにはスクロールを実行する必要があります)。

私が得た最高のものは、RelativeViewを使用することでした:

<RelativeLayout
    android:id="@+id/relativeLayout1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <LinearLayout
        android:id="@+id/header"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_alignParentTop="true" >

        (...)

    </LinearLayout>

    <LinearLayout
        android:id="@+id/footer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_alignParentBottom="true" >

        (...)

   </LinearLayout>

   <FrameLayout
        android:id="@+id/content"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/footer"
        android:layout_below="@+id/header"
        android:lay >

        (...)

    </FrameLayout>


</RelativeLayout>

解像度が大きい場合は期待どおりに機能しますが、解像度が小さい場合の問題は、ヘッダーとフッターの間にスペースが必要なため、コンテンツが本来よりも少なくなることです。

どうすれば問題を解決できますか? コンテンツはヘッダーとフッターの間にあるため、単純に fill_parent を使用できないため、(大きな解像度で) 画面のすべての空き領域を想定してコンテンツを取得する別の方法を見つけることができませんでした。min-height も使用してみましたが、成功しませんでした。

4

2 に答える 2

1

トップレベルRelativeLayout layout_heightはそれを作りfill_parentます。次にFrameLayout、プロパティを削除しlayout_aboveます。ヘッダーの下にあると言うだけで十分です。

最後にFrameLayout、画面上に要素が 1 つしかなく、画面いっぱいに表示される場合に通常使用されるため、問題を引き起こしている可能性があります。これを に置き換えてみてくださいLinearLayout。私は自分のアプリの 1 つであなたが望むものとまったく同じことをしましFrameLayoutsた。FragmentsLinearLayoutRelativeLayout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainBack"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/transparent" >

    <FrameLayout
        android:id="@+id/headerFrag"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <FrameLayout
        android:id="@+id/homeAdMsgFrag"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />

    <ListView
        android:id="@+id/contactList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/homeAdMsgFrag"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/headerFrag"
        android:background="@color/transparent"
        android:cacheColorHint="@color/transparent" >
    </ListView>

</RelativeLayout>
于 2012-04-04T05:42:57.667 に答える
0

この問題に直面する数日前に、私がしたことを解決するために、Header.xmlfooter.xmlを作成し、この 2 つの xml を他のすべてのアクティビティxml に含めました。

グローバル解像度の問題に対応するために、weightsumweightを使用しました。重みを適用すると、ヘッダーとフッターの領域とコンテンツ領域も修正されます。

この問題を解決するために私のプロジェクトで行ったこの方法で、試してみてください。うまくいくことを願っています。

<LinearLayout 
    android:weightSum="10"
    android:orientation="vertical"
    android:id="@+id/relativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <LinearLayout 
        android:id="@+id/header" 
        android:layout_width="fill_parent" 
        android:layout_weight="2"
        android:layout_height="0dp" 
        android:orientation="vertical" > 

        (...) 

    </LinearLayout> 


   <FrameLayout 
        android:id="@+id/content" 
        android:layout_width="fill_parent" 
        android:layout_weight="6"
        android:layout_height="0dp"> 

        (...) 

    </FrameLayout> 

    <LinearLayout 
        android:id="@+id/footer" 
        android:layout_width="fill_parent" 
        android:layout_weight="2"
        android:layout_height="0dp" 
        android:orientation="vertical" > 

        (...) 

   </LinearLayout> 

</LinearLayout> 

ありがとう。

于 2012-04-04T05:38:58.557 に答える