皆さんがこのタイプのレイアウトをほとんどの場合使用しているかどうかはわかりませんが、それは私を夢中にさせます。
たとえば、画面の中央にボタンを配置してから、ボタンの近くにテキストビューを配置すると、IDEが突然それらを並べ替え、テキストビューが上に表示され、ボタンが右に表示されます。
画面上であまりにも多くの要素を使用すると、問題が発生する可能性があります。
それ以来、私は線形レイアウトを使用していますが、いくつかの制限もあります。
おかげで、私はAndroid開発に不慣れです(学び始めて4日)ので、皆さんが私を助けてくれることを願っています。
3 に答える
アクティビティのメインレイアウトとしてRelativeLayoutを使用することはめったにありません。android:weightSum
アプリが画面をより大きくサポートできるように、LinearLayoutを使用して設定することをお勧めします。ご存知のように、さまざまな画面サイズでAndroidを実行しているさまざまなデバイスがあります。その固定サイズの特定の場所にそのビューが必要な場合にのみ、RelativeLayoutを使用してください。
参照したように、LinearLayoutsを使用して多くの要素を持つアクティビティを作成するこの例を参照してください。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:padding="@dimen/padding_small"
android:weightSum="3"
tools:ignore="HardcodedText" >
<LinearLayout
android:id="@+id/picker_time_hour"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:id="@+id/picker_time_hour_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/hours"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/picker_time_hour_up"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/padding_medium"
android:layout_marginRight="@dimen/padding_medium"
android:gravity="center"
android:text="+" />
<EditText
android:id="@+id/picker_time_hour_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/padding_medium"
android:layout_marginRight="@dimen/padding_medium"
android:gravity="center"
android:inputType="number" />
<Button
android:id="@+id/picker_time_hour_down"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/padding_medium"
android:layout_marginRight="@dimen/padding_medium"
android:gravity="center"
android:text="-" />
</LinearLayout>
<LinearLayout
android:id="@+id/picker_time_minute"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:id="@+id/picker_time_minute_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/minutes"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/picker_time_minute_up"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/padding_medium"
android:layout_marginRight="@dimen/padding_medium"
android:gravity="center"
android:text="+" />
<EditText
android:id="@+id/picker_time_minute_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/padding_medium"
android:layout_marginRight="@dimen/padding_medium"
android:gravity="center"
android:inputType="number" />
<Button
android:id="@+id/picker_time_minute_down"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/padding_medium"
android:layout_marginRight="@dimen/padding_medium"
android:gravity="center"
android:text="-" />
</LinearLayout>
<LinearLayout
android:id="@+id/picker_time_second"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:id="@+id/picker_time_second_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/seconds"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/picker_time_second_up"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/padding_medium"
android:layout_marginRight="@dimen/padding_medium"
android:gravity="center"
android:text="+" />
<EditText
android:id="@+id/picker_time_second_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/padding_medium"
android:layout_marginRight="@dimen/padding_medium"
android:gravity="center"
android:inputType="number" />
<Button
android:id="@+id/picker_time_second_down"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/padding_medium"
android:layout_marginRight="@dimen/padding_medium"
android:gravity="center"
android:text="-" />
</LinearLayout>
</LinearLayout>
そして結果は次のとおりです。
ご覧のとおり、LinearLayoutsを使用する必要がありますが、このトピックを読むと、選択に役立ちます。
私の経験では、EclipseドラッグアンドドロップUIビルダーを使用しないでください。それは混乱と問題だけを引き起こします。それはまだ十分に成熟していません(過去数年間で大きな進歩を遂げたとしても)。
特に初心者の場合は、xmlを直接操作する必要があります。これにより、レイアウトメカニズムをより深く理解できるようになります。ideビルダーと真剣に取り組んでいるAndroid開発者は1人も知りません。
Relative Layout は、私にとって最も頻繁に使用されるレイアウトであることが証明されています。本当にカスタマイズ可能であるという事実に加えて (おそらく LinearLayout ほど簡単ではありませんが)、かなり「高速」でもあります。「高速」とは、ネストされた LinearLayouts を使用するときに特定のオーバーヘッドがあることを意味しますが、これは RelativeLayout を使用することで回避できます。具体的には:
残念ながら、基本的な機能に固執することは、ユーザー インターフェイスを作成する最も効率的な方法ではありません。一般的な例は、ビュー階層内のビューの増殖につながる LinearLayout の悪用です。アプリケーションに追加するすべてのビュー、またはさらに悪いことにすべてのレイアウト マネージャーには代償が伴います。初期化、レイアウト、および描画が遅くなります。レイアウト パスは、重みパラメーターを使用する複数の LinearLayout をネストする場合に特にコストがかかる可能性があり、子を 2 回測定する必要があります。