0

私はシンプルな響板アプリに取り組んできました。基本的なデザインはタイトルの画像ビューで、その後に 4 行のボタン (各行に 3 つ) が続き、古い携帯電話のボタンのように見えます。下部には「ランダム」と「停止」ボタンがあります。上記の行よりも高さのスペースがわずかに少なくなりますが、ランダム ボタンはスペースを埋めるために幅を 2 ​​倍にしました。

この外観を実現するために、ネストされたウェイトと線形レイアウトを使用してきました。ただし、さらに調査したところ、現在の形式では各項目が 8 回測定されているため、これはパフォーマンスに悪いことがわかりました。私のXMLレイアウトコードは以下です。コードを小さくするために、ボタンの余白、テキスト、影などの多くの UI 修飾子を除外しました。コードは長く見えるかもしれませんが、反復的で理解しやすいコードです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="23" >

<!-- Insert Title/Picture in Linear Layout below -->

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="9"
    android:background="@drawable/etho_logo"
    android:orientation="horizontal" >
</LinearLayout>

<!-- Insert Sounds/Buttons in Linear Layout below -->

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="5"
    android:orientation="vertical"
    android:weightSum="4" >

    <!-- This is the 1st line of buttons -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal"
        android:weightSum="3" >

        <Button
            android:id="@+id/bIntro"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />

        <Button
            android:id="@+id/bIntro"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />

        <Button
            android:id="@+id/bIntro"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />
    </LinearLayout>

    <!-- This is the 2nd line of buttons -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal"
        android:weightSum="3" >

        <Button
            android:id="@+id/bIntro"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />

        <Button
            android:id="@+id/bIntro"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />

        <Button
            android:id="@+id/bIntro"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />
    </LinearLayout>

    <!-- This is the 3rd line of buttons -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal"
        android:weightSum="3" >

        <Button
            android:id="@+id/bIntro"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />

        <Button
            android:id="@+id/bIntro"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />

        <Button
            android:id="@+id/bIntro"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />
    </LinearLayout>

    <!-- This is the 4th line of buttons -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal"
        android:weightSum="3" >

        <Button
            android:id="@+id/bIntro"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />

        <Button
            android:id="@+id/bIntro"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />

        <Button
            android:id="@+id/bIntro"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />
    </LinearLayout>
</LinearLayout>

<!-- Random Button and Stop button below here -->

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="9"
    android:orientation="horizontal"
    android:weightSum="3" >

    <Button
        android:id="@+id/bIntro"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@drawable/hello_real_select" />

    <Button
        android:id="@+id/bIntro"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@drawable/hello_real_select" />
</LinearLayout>

</LinearLayout>

私は Android を初めて使用するので、相対レイアウトを使用してみましたが、非常に苦労しました。チュートリアルをオンラインで見ようとしましたが、コードで使用しても正しく見えませんでした。

たとえば、私のタイトル画像には、表示したい実際のテキストの上下に余分なスペースがあります。重みのある線形レイアウトでは、指定したスペースに合わせて自動的に小さくなります。ただし、RelativeLayout にはありません。

私がここで尋ねようとしているのは次のようなことだと思います: RelativeLayout アイテムが数行にわたって均等に配置されたボタンになるようにするにはどうすればよいですか (上記の例に示すように)、ImageViews やその他のものを実際に自動的に作成するにはどうすればよいですか?私がそれらに与えるスペースにサイズダウン?さらに情報が必要な場合は、お気軽にお問い合わせください。

4

2 に答える 2

1

RelativeLayout上で作成したような表を作成するのが難しいのはそのとおりです 。LinearLayoutはそのために非常に理想的です。これが、TableLayoutおよびTableRowビュー グループが のサブクラスである理由ですLinearLayoutRelativeLayoutただし、レイアウトの効率を高める以外に、いくつかの代替案をお勧めします。

まず、2 番目の垂直方向を削除し、LinearLayoutボタンの最初の 4 行のレイアウト ウェイトを 1 から 1.25 に変更できます。これにより、レイアウト パスの数が 8 から 4 に減少します。これは、テーブルに対して実行できる最適な値です。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="23" >

    <!-- Insert Title/Picture in Linear Layout below -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="9"
        android:background="@drawable/etho_logo"
        android:orientation="horizontal" >
    </LinearLayout>

    <!-- This is the 1st line of buttons -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1.25"
        android:orientation="horizontal"
        android:weightSum="3" >

        <!-- 3 buttons here -->

    </LinearLayout>

    <!-- This is the 2nd line of buttons -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1.25"
        android:orientation="horizontal"
        android:weightSum="3" >

        <!-- 3 buttons here -->

    </LinearLayout>

    <!-- This is the 3rd line of buttons -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1.25"
        android:orientation="horizontal"
        android:weightSum="3" >

        <!-- 3 buttons here -->

    </LinearLayout>

    <!-- This is the 4th line of buttons -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1.25"
        android:orientation="horizontal"
        android:weightSum="3" >

        <!-- 3 buttons here -->

    </LinearLayout>

    <!-- Random Button and Stop button below here -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="9"
        android:orientation="horizontal"
        android:weightSum="3" >

        <Button
            android:id="@+id/bIntro"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />

        <Button
            android:id="@+id/bIntro"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/hello_real_select" />
    </LinearLayout>

</LinearLayout>

別のオプションは、「フラット」グリッドを作成する単一のレイアウトを使用することです (ViewGroup子のレイアウトをテーブルに単独で管理します)。アプリの API レベル 14 以上をターゲットにしている場合は、GridLayout. 14 より前の API レベルをターゲットにしている場合は、独自のものを作成する必要がある場合があります。GridLayout最後に、ビュー グループと混同しないようにしてください。GridViewビュー グループはリストで使用するためのものであり、目的を達成することはできません。

于 2013-07-21T18:52:50.253 に答える
0

0dp の幅と重みを使用することをお勧めします。これにより、測定数が半分になります (wrap_content には測定が必要ですが、0dp には必要ないため)。

また、すでに線形レイアウトになっているため、複雑な垂直線形レイアウトは必要ありません (読みやすくするためにはすっきりしていますが、最適化のために削除して重みを調整することができます)。

于 2013-07-21T19:03:18.647 に答える