web-dev-qa-db-ja.com

親のConstraintLayoutで固定サイズのImageViewを水平方向に中央揃えにします

私はかなり単純なレイアウトを持っています:画面全体を埋めるConstraintLayoutと、上部にCardViewの半分とその半分の上にあるImageViewを持つ1つの大きなCardView(実際には半分ではありませんが、要点はわかります)。

ただし、2つの問題があります。ImageViewが親の左側に固定され、水平方向に中央に配置する方法がわかりません。Googleで見つけることができるのは、複数の要素のチェーンだけですが、1つを中央に配置したいだけです。

レイアウトエディタは私にとって非常にうまく機能しません。私の最初の不満は、私が親に制約を設けることができないようだということです。次に、「親の中央に配置」というボタンを押して、ImageViewを親の水平方向の中央に配置してみました。これにより、CardViewの幅が広がり、ImageViewにはまったく影響しません。

私がそれにいる間、どうすればImageViewの上にCardViewをzオーダーできますか?

ここにレイアウトがあります:

<?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"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@color/colorPrimaryDark">
<Android.support.v7.widget.CardView
    Android:layout_width="0dp"
    Android:layout_height="0dp"
    Android:layout_marginBottom="32dp"
    Android:layout_marginEnd="32dp"
    Android:layout_marginStart="32dp"
    Android:layout_marginTop="160dp"
    app:cardCornerRadius="12dp"
    app:cardElevation="32dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent">

</Android.support.v7.widget.CardView>

<ImageView
    Android:layout_width="200dp"
    Android:layout_height="200dp"
    Android:layout_marginTop="40dp"
    Android:scaleType="centerCrop"
    Android:src="@drawable/re_zero"

    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

ありがとう!

10
Zackline

docs によると:

ビューの両側に制約を追加すると(同じ寸法のビューサイズが「固定」または「コンテンツを折り返す」のいずれか)、ビューはデフォルトで2つのアンカーポイントの中央に配置されます。

ImageViewを中心とした次の制約を追加します。

app:layout_constraintEnd_toEndOf="parent"

また、CardViewよりも高い標高を追加すると、標高がz-indexをオーバーライドするため、z-indexが修正されました。

14
Zackline