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
で警告が表示される、どうすればよいですか?
図に示すように、接続を作成します。制約レイアウトでは、ウィジェットを任意の場所に配置できますが、アプリ上で実行しているウィジェットは、開発中に配置したAndroid studio。エッジ接続からドラッグすることで、ウィジェットに水平および垂直の両方の制約があることを確認します。ウィジェットは、あらゆる側面に丸いものがあり、それをドラッグして位置を固定します。
この問題は、使用していて、ビューに制約がないために発生しました
tools:layout_editor_absoluteY="8dp"
tools:layout_editor_absoluteX="8dp"
設計時(Android Studio)のプレビューで)、実行時に効果はありません
この警告を解決するには、レイアウトに十分な制約を追加するか、単純に両方を削除する必要がありますtools:layout_editor_absoluteY="8dp"
およびtools:layout_editor_absoluteX="8dp"
何よりもまず、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は、垂直方向(上と下)と水平方向(開始と終了)の両方に制約されます。
これがお役に立てば幸いです。陽気なコーディング!
相対レイアウトは制約されていません。制約レイアウトと相対レイアウトは両方とも独立しています。 [デザイン/テキスト]タブに移動して、正しく配置します。また、2つのレイアウトのうち1つだけを使用することも検討できます。制約レイアウトは相対レイアウトとしてうまく機能します
この警告は、レイアウトまたはウィジェットに制約コードはないがAndroidビューのニーズがある場合に発生します。たとえば、Android:layout_marginTop = "12dp"を使用する場合、app:layout_constraintTop_toTopOf = ""を追加する必要があります。そうでない場合、警告が表示されます。