Viewを重ねるというのは、画像の上に文字を表示したりする場合などが考えられます。私がよく使っている方法ですが、RelativeLayoutの下にImageViewとTextViewを入れ、margin, paddingをいじって場所決めをして重ねています(margin, paddingについてはChapter09で取り上げます)。
LinearLayoutでは基本的にViewが重なり合うということはないので、RelativeLayoutを使います。
では、サンプルを見てみましょう。
Sample02アプリを起動して、メニューを押してchapter08を選んでください。
以下のような画面になります。
Chapter07とどこが違うねん!という感じですが、よく見ると、右上にSample02の文字があります。
Sample02という文字列はlayout_alignParentRight=trueが指定されています。これで親要素のRelativeLayoutに対して右寄せの位置に表示されます。しかしバリスタの画像のサイズが ちょっと小さかったので、重なってないように見えたので、ついでだからlayout_margin指定をして画像の上にもってきてみました。親要素に対して相対的に配置すれば、View同士を重ねることができるわけです。
コードレビュー
ではレイアウトのコードを見てみましょう。 Sample02プロジェクトの/res/layout/chapter08.xmlを開いてください。<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- 親要素(RelativeLayout)に対して、子要素を相対的に配置します。 親要素に対して相対的に配置すれば、Viewを重ねることができます。 今回はTextViewをRelativeLayoutに対して右寄せにして、 layout_margin***を指定することで、ImageViewの上に重ねました。 --> <ImageView android:src="@drawable/barista" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:scaleType="fitCenter" android:adjustViewBounds="true" /> <TextView android:text="@string/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginTop="40dp" android:layout_marginRight="40dp" /> </RelativeLayout>TextViewに、layout_alignParentRight=trueを指定して、親要素のRelativeLayoutに対して右寄せにしています(23行目)。
その後、24行目、25行目でmarginの指定を行っています。親要素のRelativeLayoutからのマージンになっています。重ねるだけならば、そこまで難しいことはありません。複雑なレイアウトも、分解していけばこのレイアウトのような形で、RelativeLayout内で重ねるなどが多いんじゃないかなと思います(あくまで自分の経験の中でですが)
0 件のコメント:
コメントを投稿