小さなビューを別の大きなビューの上に配置できますか?たとえば、バックグラウンドでファイルを再生しているVideoViewがあります。この上、中央/コーナーのどこかに、別のImageViewを配置します。
ただし、線形/相対レイアウトでは、ビューは1つずつまたは相互に相対的にのみ配置でき、AbsoluteLayoutは推奨されません。だから私は何をしますか?
FrameLayouts
下のビューの上に各ビューを重ねることができます。これはRelativeLayout
でも実現できます。
FrameLayout
は最も単純なViewGroup
であり、レイアウトXMLで定義された(またはプログラムで追加された)順序でViews
をスタックします。最初の方が低く、最後の方が上になります。
2つのViews
を積み重ねてオフセットし、ポイントをわかりやすくする例を次に示します。
これは、2つのTextView
ボックスが重なっている実際のレイアウトXMLです。 2つのボックスのオフセットはAndroid:layout_gravity
を使用して行われ、Android:gravity
は各ボックス内のテキスト自体を中央に配置するために使用されます。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="100dp"
Android:layout_height="100dp">
<TextView
Android:layout_width="60dp"
Android:layout_height="60dp"
Android:layout_gravity="top|left"
Android:background="@Android:color/holo_blue_light"
Android:gravity="center"
Android:text="First is below"/>
<TextView
Android:layout_width="60dp"
Android:layout_height="60dp"
Android:layout_gravity="bottom|right"
Android:background="@Android:color/holo_green_light"
Android:gravity="center"
Android:text=" Last is on top"/>
</FrameLayout>
ButtonViewの上にビューを配置したい場合に備えて、これを使用します。 Android:elevation="7dp"
ボタンの上に配置する必要があるビュー。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:padding="@dimen/dp_20"
Android:background="@color/yellow"
>
<VideoView
Android:id="@+id/videoview"
Android:layout_width="wrap_content"
Android:layout_centerInParent="true"
Android:layout_height="300dp"
Android:contentDescription="@string/app_name"
/>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/camera"
Android:layout_margin="30dp"
Android:layout_alignParentEnd="true"
Android:layout_centerVertical="true"
Android:id="@+id/imageView" />
</RelativeLayout>
ConstraintLayout を使用してそれを行うこともできます。Googleによって導入された新しいレイアウトです。
ConstraintLayoutを使用すると、フラットなビュー階層(ネストされたビューグループなし)で大きく複雑なレイアウトを作成できます。
<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:layout_weight="4"
tools:context="com.edalat.example.MainActivity">
<VideoView
Android:id="@+id/videoView"
Android:layout_width="283dp"
Android:layout_height="349dp"
app:layout_constraintBottom_toBottomOf="parent"
Android:layout_marginBottom="24dp"
app:layout_constraintTop_toTopOf="parent"
Android:layout_marginTop="24dp"
Android:layout_marginRight="24dp"
app:layout_constraintRight_toRightOf="parent"
Android:layout_marginLeft="24dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintHorizontal_bias="0.509"/>
<ImageView
Android:id="@+id/imageView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:srcCompat="@mipmap/ic_launcher"
app:layout_constraintTop_toTopOf="parent"
Android:layout_marginTop="24dp"
app:layout_constraintBottom_toBottomOf="parent"
Android:layout_marginBottom="24dp"
Android:layout_marginLeft="24dp"
app:layout_constraintLeft_toLeftOf="parent"
Android:layout_marginRight="24dp"
app:layout_constraintRight_toRightOf="parent"/>
</Android.support.constraint.ConstraintLayout>