Cette vue n'est pas contrainte verticalement. Au moment de l'exécution, il sautera vers la gauche sauf si vous ajoutez une contrainte verticale

99

entrez la description de l'image iciLe nouvel éditeur de mise en page dans Android Studio 2.2 continue d'afficher cette erreur sur des vues telles que EditText et Buttons. De plus, tous les liens qui aident à l'intégration avec la nouvelle mise en page de contraintes seraient appréciés.

code:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    android:id="@+id/activity_main"
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.set.email.MainActivity"
    tools:layout_editor_absoluteX="0dp"
    tools:layout_editor_absoluteY="81dp">

    <TextView
        android:text="To:"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:layout_editor_absoluteX="7dp"
        tools:layout_editor_absoluteY="4dp"
        android:id="@+id/textTo"/>

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:ems="10"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="24dp"
        android:id="@+id/editTo"
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"/>

    <EditText
        android:layout_width="384dp"
        android:layout_height="42dp"
        android:inputType="textPersonName"
        android:ems="10"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="94dp"
        android:id="@+id/editSubject"
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"/>

    <EditText
        android:layout_width="384dp"
        android:layout_height="273dp"
        android:inputType="textPersonName"
        android:ems="10"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="179dp"
        android:id="@+id/editMessage"
        app:layout_constraintLeft_toLeftOf="@+id/activity_main"
        tools:layout_constraintLeft_creator="50"
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"/>

    <Button
        android:text="Send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:layout_editor_absoluteX="140dp"
        tools:layout_editor_absoluteY="454dp"
        android:id="@+id/btnSend"
        app:layout_constraintLeft_toLeftOf="@+id/editMessage"
        tools:layout_constraintLeft_creator="0"
        app:layout_constraintRight_toRightOf="@+id/activity_main"
        android:layout_marginEnd="16dp"
        tools:layout_constraintRight_creator="0"
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"/>


</android.support.constraint.ConstraintLayout>
onexf
la source
Quelle erreur? Veuillez décrire votre problème réel. Ce n'est pas assez de détails.
Lexi
pouvez-vous partager votre code xml?
Janki Gadhiya
Une fois la disposition de la disposition des contraintes terminée, cliquez sur le bouton pour ajouter automatiquement toutes les contraintes manquantes.
Alex Cohn
1
bouton? tu veux dire l'ampoule à charpie rouge? il n'affiche aucune option pour ajouter automatiquement les contraintes manquantes.
onexf

Réponses:

81

La mise en page par contraintes vise à réduire les hiérarchies de mise en page et améliore les performances des mises en page (techniquement, vous n'avez pas à apporter de modifications pour différentes tailles d'écran, pas de chevauchement, fonctionne comme un charme sur un mobile ainsi qu'un onglet avec les mêmes contraintes) .Voici comment vous vous débarrassez de l'erreur ci-dessus lorsque vous utilisez le nouvel éditeur de mise en page.

entrez la description de l'image ici

Cliquez sur le petit cercle et faites-le glisser vers la gauche jusqu'à ce que le cercle devienne vert, pour ajouter une contrainte à gauche (donnez un nombre, disons x dp. Répétez-le avec les autres côtés et laissez la contrainte du bas vide si vous avez une autre vue en dessous. . entrez la description de l'image ici

Modifier: selon le site des développeurs, au lieu d'ajouter des contraintes à chaque vue lorsque vous les placez dans la mise en page, vous pouvez déplacer chaque vue dans les positions souhaitées, puis cliquez sur Infer Constraints pour créer automatiquement des contraintes. plus ici

onexf
la source
Je viens d'ajouter imageview dans la mise en page contraint mais ne s'affiche pas lorsque je lance l'application. Pouvez-vous m'aider s'il vous plaît ?
PriyankaChauhan
79

À partir d'Android Studio v3 et versions ultérieures, Infer Constraint a été supprimé de la liste déroulante.

Utilisez l' icône de la baguette magique dans le menu de la barre d'outils au-dessus de l'aperçu du design; il y a le bouton " Infer Constraints ". Cliquez sur ce bouton, cela ajoutera automatiquement quelques lignes dans le champ de texte et la ligne rouge sera supprimée.

entrez la description de l'image ici

Gvtha
la source
1
Dans mon cas, cela n'ajoute qu'une contrainte d'ignorer mais cela ne résout pas le problème
mrroot5
cette solution est plus simple que la première. Mais ne fonctionne que pour AS v3 et versions ultérieures.
Yohanes AI le
43

Copiez simplement ce code sur tous les composants que vous allez faire glisser.

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"

exemple:

<TextView
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    android:text="To:"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:layout_editor_absoluteX="7dp"
    tools:layout_editor_absoluteY="4dp"
    android:id="@+id/textTo"/>
ainz Monténégro
la source
5
Mais pourquoi? Pouvez-vous expliquer ses détails?
Prathamesh More
22

Allez dans le Design, faites un clic droit sur votre Widget, Disposition des Contraintes >> Inférer des Contraintes. Vous pouvez observer que du code a été automatiquement ajouté à votre texte.

Atul Chavan
la source
Oui, les contraintes de déduction utilisent les valeurs par défaut spécifiées dans le fichier activity.xml
Rohan Gala
5
Follow these steps:
Right click on designing part > Constraint Layout > Infer Constraints
Makvin
la source
4

Si le fait de déduire le Constraintsvous donne toujours l'erreur, utilisez simplement ce code:

app:layout_constraintBottom_toBottomOf="parent"
user8622246
la source
2

Vous devez faire glisser le EditTextdepuis le bord de la mise en page et pas seulement l'autre widget. Vous pouvez également ajouter des contraintes en faisant simplement glisser le point de contrainte qui entoure le widget vers le bord de l'écran pour ajouter des contraintes comme spécifié.

Le code modifié ressemblera à ceci:

    app:layout_constraintLeft_toLeftOf="@+id/router_text"
    app:layout_constraintTop_toTopOf="@+id/activity_main"
    android:layout_marginTop="320dp"
    app:layout_constraintBottom_toBottomOf="@+id/activity_main"
    android:layout_marginBottom="16dp"
    app:layout_constraintVertical_bias="0.29" 
Abdul Rahman K
la source
1

Accédez à la mise en page XML Texte où le widget (bouton ou autre vue) indique une erreur, placez le curseur là-bas et appuyez sur alt+ enteret sélectionnez les attributs de contraintes manquants.

KeyBoardBoy
la source
Il donne également un message d'avertissement indiquant que la chaîne codée en dur "TextView" devrait utiliser la ressource @string
Mohammad Heydari
1

par exemple j'ai ceci

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

utiliser la disposition RelativeLayout comme ceci

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
ibrahim mert
la source
1

Passez simplement en mode Conception et localisez le widget concerné. Prenez l'un des points sur la limite du widget et joignez-le à un bord approprié de l'écran (ou à un point sur un autre widget).

Par exemple, si le widget est une barre d'outils, saisissez simplement le point le plus haut et joignez-le au bord supérieur de l'écran du téléphone, comme indiqué dans l'image.

Vue de conception

Sunit Gautam
la source
1
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"

Cela m'aide beaucoup

Vanya Rachel
la source
-3

Vous devez changer androidx.constraintlayout.widget.ConstraintLayoutpour RelativeLayout.

Youness Labghough
la source