1

ビュー階層をフラット化することで、Androidアプリのレイアウトを最適化しようとしています。これが特に難しいものです!

非常に非効率的なレイアウト

このレイアウトには、一番上の行と一番下の行(水平方向のサブLinearLayouts自体)を保持するためのメインのLinearLayoutがあります。中央の4つの項目はそれぞれ、layout_weightsを使用して広げられた垂直RelativeLayout(ImageViewとtextViewに対応するため)です。2つのアイテムを含む各行は、水平線形レイアウトでもあります。

言うまでもなく、このレイアウトはひどく非効率的であり、描画時に多くの「振付師がフレームをスキップしました」というメッセージが表示されます。これらのネストされたレイアウトを削除したいのですが、AFAIK RelativeLayoutは、行のアイテムを水平方向に、中央の2つの行を垂直方向に等間隔に配置するのに役立ちません。また、ImageViewとTextViewを複合ドローアブルに置き換えることを検討しましたが、ドローアブルのサイズを制御する方法がわかりません。

どんな助けでも大歓迎です!

編集:レイアウトの大まかな説明は次のとおりです。

<!-- The top bar -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="80dip"
android:background="@drawable/some_image">
    ...
</LinearLayout>

<!-- Central Layout -->
<LinearLayout 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="2"
android:orientation="vertical">

    <!-- First Row -->
    <LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:baselineAligned="false"
    android:layout_marginTop="10dp"
    android:layout_weight="1"
    android:weightSum="2">


        <!-- Item 1 -->
        <RelativeLayout
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:gravity="center_vertical">

         <!-- ImageView and TextView here -->

        </RelativeLayout>

        <!-- Item 2 -->
        <RelativeLayout
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:gravity="center_vertical">

         <!-- ImageView and TextView here -->

        </RelativeLayout>

    </LinearLayout>
    <!-- End of first row layout -->

    <!-- Second Row -->
    <LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:baselineAligned="false"
    android:layout_marginTop="10dp"
    android:layout_weight="1"
    android:weightSum="2">


        <!-- Item 3 -->
        <RelativeLayout
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:gravity="center_vertical">

         <!-- ImageView and TextView here -->

        </RelativeLayout>

        <!-- Item 4 -->
        <RelativeLayout
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:gravity="center_vertical">

         <!-- ImageView and TextView here -->

        </RelativeLayout>

    </LinearLayout>
<!-- End of second row layout -->

</LinearLayout>
<!-- End of central layout -->

<!-- Bottom bar -->    
<LinearLayout...>
....
</LinearLayout>

4

2 に答える 2

0

あなたの例は、ここの Android チームによって提供されたデモに示されているものとよく似ています: http://developer.android.com/reference/android/widget/GridLayout.html

私は決してGridLayoutに精通しているわけではありませんが(機能する前に多くの試行錯誤を繰り返しました)、あなたが持っているものを見ると、うまくいくはずです(特に、下部にあるすべてのボタンを上部に移動し、それらを ActionBar として)。

layout_weights を取り除くと、それらが使用されるたびに何度も測定されるため、すべてが大幅に改善されます。

于 2013-05-17T20:00:58.193 に答える
-1

これを行う最も最適な方法は、独自の custom を作成することViewGroupです。android がどのようにレイアウトを行うかを理解していれば、それは非常に簡単です。

Romain Guy によるこれらのスライドを参照してください。

https://docs.google.com/leaf?id=0B_VKZCqEnHblNDdiY2UxODgtYWNhNS00MmU4LWE4NDMtZjQ1OWI5MDMxZTVh&sort=name&layout=list&num=50 .

于 2013-01-07T14:13:44.157 に答える