web-dev-qa-db-ja.com

制約レイアウトは、Android Studio 2.3

Android Studio 2.3、その後テンプレートxmlとしてデフォルトのConstrainLayoutを取得しています。

しかし、その点で子レイアウトとしてRelativeLayoutがあり、次の警告が表示されます。

このビューは制約されておらず、設計時の位置のみを持つため、制約を追加しない限り(0,0)にジャンプします。

レイアウトエディターを使用すると、ウィジェットをキャンバス上の任意の場所に配置でき、設計時属性(layout_editor_absoluteXなど)で現在の位置を記録します。これらの属性は実行時に適用されないため、デバイスにレイアウトをプッシュすると、ウィジェットはエディターに表示される場所とは異なる場所に表示されます。これを修正するには、エッジ接続からドラッグして、ウィジェットに水平および垂直の両方の制約があることを確認します。

<?xml version="1.0" encoding="utf-8"?>
<layout 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.support.constraint.ConstraintLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:context="com.pratikbutani.demoapp.MainActivity"
        tools:showIn="@layout/activity_main">

        <RelativeLayout 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/content_main"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            tools:showIn="@layout/activity_main"
            tools:layout_editor_absoluteY="8dp"
            tools:layout_editor_absoluteX="8dp">

            <Android.support.v7.widget.RecyclerView
                Android:id="@+id/my_recycler_view"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:layout_centerHorizontal="true"
                Android:layout_centerVertical="true" />

        </RelativeLayout>

    </Android.support.constraint.ConstraintLayout>
</layout>

RelativeLayoutで警告が表示される、どうすればよいですか?

6
Pratik Butani

[設計]に移動し、相対レイアウトを右クリックして、[制約レイアウト]-> [制約の推測] enter image description here

9
J. Shiv

オブジェクトをドラッグして壁に接続します...壁とオブジェクト間の接続を作成します

画像の例を見てください

enter image description here

3
Samir Elekberov

図に示すように、接続を作成します。制約レイアウトでは、ウィジェットを任意の場所に配置できますが、アプリ上で実行しているウィジェットは、開発中に配置したAndroid studio。エッジ接続からドラッグすることで、ウィジェットに水平および垂直の両方の制約があることを確認します。ウィジェットは、あらゆる側面に丸いものがあり、それをドラッグして位置を固定します。

https://i.stack.imgur.com/r8L8O.png

1
tamil arasan

この問題は、使用していて、ビューに制約がないために発生しました

tools:layout_editor_absoluteY="8dp"
tools:layout_editor_absoluteX="8dp"

設計時(Android Studio)のプレビューで)、実行時に効果はありません

この警告を解決するには、レイアウトに十分な制約を追加するか、単純に両方を削除する必要がありますtools:layout_editor_absoluteY="8dp"およびtools:layout_editor_absoluteX="8dp"

0
Phan Van Linh

何よりもまず、ConstraintLayoutを使用しているため、子のRelativeLayoutを内部に埋め込む必要はありません。つまり、2台の車を同時に運転するようなもので、冗長です。 RelativeLayoutのみ、またはConstraintLayoutのみを使用する必要があります。

ただし、この実装を引き続き主張する場合、実際の問題は次のとおりです。

RelativeLayoutでtools:layout_editor_absoluteXおよびtools:layout_editor_absoluteY要素を使用しましたが、RelativeLayoutは制約されていません。このため、absoluteXおよびabsoluteYの参照点を実行時に決定できませんでした。これを修正するには、RelativeLayoutに次の属性を追加して、RelativeLayoutをConstraintLayoutに垂直および水平に制約するだけです。

    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"

このようにして、RelativeLayoutは、垂直方向(上と下)と水平方向(開始と終了)の両方に制約されます。

これがお役に立てば幸いです。陽気なコーディング!

0
Taslim Oseni

相対レイアウトは制約されていません。制約レイアウトと相対レイアウトは両方とも独立しています。 [デザイン/テキスト]タブに移動して、正しく配置します。また、2つのレイアウトのうち1つだけを使用することも検討できます。制約レイアウトは相対レイアウトとしてうまく機能します

0
PRAISE ELISHA

この警告は、レイアウトまたはウィジェットに制約コードはないがAndroidビューのニーズがある場合に発生します。たとえば、Android:layout_marginTop = "12dp"を使用する場合、app:layout_constraintTop_toTopOf = ""を追加する必要があります。そうでない場合、警告が表示されます。

0
user1452641