0

XML では、ビューは高価であり、理想的にはできる限り少なくするよう努めるべきであることはわかっています。しかし、私の場合、80 近くの多くのビューを持たなければならないような方法でレイアウトを設計しています。Eclipse から警告が表示されたので、いくつかのビューを削除しましたが、私の実装では、最小限の 48 ビューが必要であり、余分なものは含まれていません。したがって、私の質問は、本当にもっと簡単な方法を見つけるべきか、それとも問題ないかということです。実際に最大にする必要がある実際の数は何ですか?

XML ファイル


<?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" >
<TextView 
        android:id="@+id/top_bar_date_display"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="July 1, 2012"
        android:background="#696969"/>
<ScrollView 
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    >
<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/day_view_floaty_holder"
    android:background="#000000">
    <GridLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnCount="1" >

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >
            <TextView 
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="12\nAM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal"
                android:layout_marginBottom="1dp" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView 
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="1\nAM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>
        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView 
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="2\nAM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView 
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="3\nAM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView 
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="4\nAM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView 
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="5\nAM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView 
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="6\nAM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView 
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="7\nAM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView 
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="8\nAM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView 
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="9\nAM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView 
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="10\nAM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="11\nAM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >
            <TextView
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="12\nPM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="1\nPM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="2\nPM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="3\nPM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="4\nPM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="5\nPM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="6\nPM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="7\nPM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="8\nPM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="9\nPM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="10\nPM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:background="#ffffff"
            android:layout_marginBottom="1dp" >

            <TextView
                android:layout_width="20dp"
                android:layout_height="60dp"
                android:text="11\nPM"
                android:background="#bebebe"
                android:textSize="10dp"
                android:gravity="center_horizontal" />
        </LinearLayout>

    </GridLayout>

    <!-- THIS GRIDLAYOUT IS WHERE THE EVENTS WILL BE PLACED-->
    <GridLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnCount="1" >
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_0"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_1"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_2"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_3"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_4"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_5"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_6"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_7"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_8"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_9"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_10"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_11"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_12"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_13"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_14"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_15"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_16"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_17"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_18"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_19"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_20"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_21"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_22"
            android:orientation="horizontal" ></LinearLayout>
        <LinearLayout 
            android:layout_height="61dp"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dp"
            android:id="@+id/day_view_23"
            android:orientation="horizontal" ></LinearLayout>

    </GridLayout>


</RelativeLayout>
</ScrollView>


おそらく、コードが変換されたものの背後にあるロジックを説明する必要があります。基本的に、24 行の GridLayout と、その上に浮いている別の 24 行の別の GridLayout が必要でした。これは、最初の GridLayout の上に浮かせる必要があるものを分離するために行いました。カレンダーアプリの日表示用と思われます。

4

2 に答える 2

1

私が言ったように、私はListViewデータを表示するために a を使用して、あまり多くのビューを作成しないようにします。最初に、リストに表示するユーザー イベントを表すクラスを作成します。

private static class Event {

        public int startHour;
        public int hours = 1;
        public String name;
        public String date;
        public boolean isEmptyEvent = true;

        public Event(int startHour, int hours, String name, String date,
                boolean isEmptyEvent) {
            this.startHour = startHour; 0 to 23 (the method getStartHour makes this pretty)
            this.hours = hours; // how many this event requires(default 1)
            this.name = name;
            this.date = date;
            this.isEmptyEvent = isEmptyEvent;
        }

        public String getStartHour() {
            // should optimize this method so you don't end up creating String
            // after String(char array?)!
            if (startHour < 10) {
                return "0" + startHour + ":00";
            }
            return String.valueOf(startHour) + ":00";
        }
    }

次に、オブジェクトにあるデータを解析しEventsます(データベースに何を保存するかわかりませんので、これは推測です):

public SparseArray<Event> getData(String date) {
        // here you get the data from the database and create Events object for
        // those dates
        SparseArray<Event> data = new SparseArray<Event>(); // for efficiency
                // add some random events
        data.put(3, new Event(3, 1, "Breackfast", date, false));// one event at 3 taking 1 hour
        data.put(14, new Event(14, 3, "Lunch", date, false));// one event at 14 taking 3 hour
        data.put(20, new Event(20, 2, "Dinner", date, false));// one event at 20 taking 2 hour
        return data;
    }

次に、アダプタで残りの空のエントリ (ユーザーがまだ何も設定していない場所) を空Eventsのオブジェクトで埋めて、それをユーザーに表示します。コードが少し大きいので、ここには投稿しません。代わりに、ここで完全なアクティビティ + レイアウトを見つけることができますhttps://gist.github.com/3370107

于 2012-08-16T13:42:57.257 に答える
1

xml ドキュメントに基づいて、ListView と ListAdapter を使用すると、これを非常に簡単に解決できます。

その xml ドキュメントを、'top_bar_date_display' TextView と ListView を含む 1 つのメイン xml ファイルに縮小できます。次に、リストの行項目を含む xml レイアウト ファイルを作成します。その後、ListAdapter は行の詳細を設定します。次に、必要な各行を表すカスタム オブジェクトの配列を含むリスト アダプターを実装します。リスト アダプターは、配列内の位置に基づいて getView メソッドにテキストを設定します。

リスト行は次のようになります。

<LinearLayout
    android:id="@+id/rowItem"
    android:layout_width="match_parent"
    android:layout_height="60dp" >

    <TextView
        android:layout_width="20dp"
        android:layout_height="match_parent"
        android:background="#bebebe"
        android:layout_marginBottom="1dp"
        android:gravity="center_horizontal"
        android:text="[Replaced by ListAdapter]"
        android:textSize="10dp" />

    <LinearLayout
        android:id="@+id/event1"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="1dp" />


</LinearLayout>

編集:

リストビューに仕切りがない場合、行ビューの子をスタイル設定して偽の仕切りを作成すると、リスト アダプターは行 1 の幅を 'event1' に設定し、行の 'event1' に同じ幅を使用できます。 2. 'event1' は 2 つの行の間にあるため、row1 の 'event1' には (偽の) 仕切りが表示されないように選択します。背景が同じであるため、それらが 1 つのオブジェクトであるかのように表示されます。いくつかの操作を行う必要があります。ただし、押された状態などのばかげたもの。

ListAdapter は、rowItem.addView(new LinearLayout) で追加される新しいイベントを動的に作成することもできます。すべてのイベント、それらがまたがる行、および衝突を追跡する必要があります。

于 2012-08-16T04:21:53.820 に答える