Questa vista non è vincolata verticalmente. In fase di esecuzione salterà a sinistra a meno che non si aggiunga un vincolo verticale


99

inserisci qui la descrizione dell'immagineIl nuovo editor di layout in Android Studio 2.2 continua a mostrare questo errore su visualizzazioni come EditText e Buttons. Inoltre, sarebbe apprezzato qualsiasi collegamento che aiuti nell'onboarding con il nuovo layout dei vincoli.

codice:

<?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>

Quale errore? Descrivi il tuo problema reale. Questo non è un dettaglio sufficiente.
Lexi

puoi condividere il tuo codice xml ??
Janki Gadhiya

Al termine del layout del layout dei vincoli, fare clic sul pulsante per aggiungere automaticamente tutti i vincoli mancanti.
Alex Cohn

1
pulsante? intendi la lampadina rossa? non mostra alcuna opzione per aggiungere automaticamente i vincoli mancanti.
onexf

Risposte:


81

Il layout vincolato mira a ridurre le gerarchie di layout e migliora le prestazioni dei layout (tecnicamente, non è necessario apportare modifiche per diverse dimensioni dello schermo, nessuna sovrapposizione, funziona come un fascino su un dispositivo mobile e su una scheda con gli stessi vincoli). ti sbarazzi dell'errore di cui sopra quando usi il nuovo editor di layout.

inserisci qui la descrizione dell'immagine

Fare clic sul piccolo cerchio e trascinarlo a sinistra finché il cerchio non diventa verde, per aggiungere un vincolo di sinistra (dare un numero, ad esempio x dp. Ripetere con gli altri lati e lasciare vuoto il vincolo inferiore se si ha un'altra vista sotto di esso . inserisci qui la descrizione dell'immagine

Modifica: secondo il sito degli sviluppatori, invece di aggiungere vincoli a ogni vista mentre le inserisci nel layout, puoi spostare ciascuna vista nelle posizioni desiderate, quindi fare clic su Infer Constraints per creare automaticamente vincoli. più qui


Ho appena aggiunto la visualizzazione dell'immagine nel layout di contrasto ma non viene visualizzata quando eseguo l'app. Potete per favore aiutarmi ?
PriyankaChauhan

79

Da Android Studio v3 e versioni successive, Infer Constraint è stato rimosso dal menu a discesa.

Usa l' icona della bacchetta magica nel menu della barra degli strumenti sopra l'anteprima del disegno; c'è il pulsante " Infer Constraints ". Fare clic su questo pulsante, questo aggiungerà automaticamente alcune linee nel campo di testo e la linea rossa verrà rimossa.

inserisci qui la descrizione dell'immagine


1
Nel mio caso, aggiunge solo un vincolo ignora ma non risolve il problema
mrroot5

questa soluzione è più semplice di quella in alto. Ma funziona solo per AS v3 e versioni successive.
Yohanes AI

43

Copia semplicemente questo codice su tutti i componenti che trascinerai.

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

esempio:

<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"/>

5
Ma perché? Puoi spiegarne i dettagli?
Prathamesh More

22

Vai a Design, fai clic con il pulsante destro del mouse sul tuo Widget, Constraint Layout >> Infer Constraints. Puoi osservare che del codice è stato aggiunto automaticamente al tuo testo.


Sì, i vincoli di inferenza utilizzano i valori predefiniti specificati nel file activity.xml
Rohan Gala

5
Follow these steps:
Right click on designing part > Constraint Layout > Infer Constraints

4

Se dedurre il messaggio Constraintsti dà ancora l'errore, usa questo codice:

app:layout_constraintBottom_toBottomOf="parent"

2

Devi trascinare il file EditText dal bordo del layout e non solo l'altro widget. È inoltre possibile aggiungere vincoli semplicemente trascinando il punto di vincolo che circonda il widget sul bordo dello schermo per aggiungere vincoli come specificato.

Il codice modificato avrà un aspetto simile a questo:

    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" 

1

Vai al testo del layout XML dove il widget (pulsante o altra vista) indica un errore, focalizza il cursore lì e premi alt+ entere seleziona gli attributi dei vincoli mancanti.


Fornisce anche un messaggio di avviso che indica che la stringa hardcoded "TextView" dovrebbe utilizzare la risorsa @string
Mohammad Heydari

1

per esempio ho questo

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

usa il layout RelativeLayout come questo

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

1

Passa semplicemente alla visualizzazione struttura e individua il widget interessato. Prendi uno dei punti sul bordo del widget e uniscilo a un bordo appropriato dello schermo (o a un punto su qualche altro widget).

Ad esempio, se il widget è una barra degli strumenti, basta afferrare il punto più in alto e unirlo al bordo più in alto dello schermo del telefono come mostrato nell'immagine.

Vista di progettazione


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

Questo mi aiuta molto


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.