Diese Ansicht ist nicht vertikal eingeschränkt. Zur Laufzeit springt es nach links, es sei denn, Sie fügen eine vertikale Einschränkung hinzu

98

Geben Sie hier die Bildbeschreibung einDer neue Layout-Editor in Android Studio 2.2 zeigt diesen Fehler weiterhin in Ansichten wie EditText und Buttons an. Bitte helfen Sie. Auch alle Links, die beim Onboarding mit dem neuen Einschränkungslayout helfen, sind willkommen.

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
quelle
Welcher Fehler? Bitte beschreiben Sie Ihr eigentliches Problem. Dies ist bei weitem nicht genug Detail.
Lexi
Kannst du deinen XML-Code teilen?
Janki Gadhiya
Wenn Sie mit dem Layout der Einschränkungen fertig sind, klicken Sie auf die Schaltfläche, um alle fehlenden Einschränkungen automatisch hinzuzufügen.
Alex Cohn
1
Taste? du meinst die rote fusselbirne? Es werden keine Optionen zum automatischen Hinzufügen fehlender Einschränkungen angezeigt.
Onexf

Antworten:

81

Das Einschränkungslayout zielt darauf ab, Layouthierarchien zu reduzieren und die Leistung von Layouts zu verbessern (technisch gesehen müssen Sie keine Änderungen für verschiedene Bildschirmgrößen vornehmen. Keine Überlappung, funktioniert wie ein Zauber auf einem Mobiltelefon sowie auf einer Registerkarte mit denselben Einschränkungen) Sie werden den obigen Fehler beseitigen, wenn Sie den neuen Layout-Editor verwenden.

Geben Sie hier die Bildbeschreibung ein

Klicken Sie auf den kleinen Kreis und ziehen Sie ihn nach links, bis der Kreis grün wird, um eine linke Einschränkung hinzuzufügen (geben Sie eine Zahl an, z. B. x dp. Wiederholen Sie diesen Vorgang mit den anderen Seiten und lassen Sie die untere Einschränkung leer, wenn Sie eine andere Ansicht darunter haben . Geben Sie hier die Bildbeschreibung ein

Bearbeiten: Laut Entwicklerseite können Sie, anstatt jeder Ansicht beim Platzieren im Layout Einschränkungen hinzuzufügen, jede Ansicht an die gewünschten Positionen verschieben und dann auf Einschränkungen ableiten klicken, um automatisch Einschränkungen zu erstellen. mehr hier

onexf
quelle
Ich habe gerade die Bildansicht im Contraint-Layout hinzugefügt, sie wird jedoch nicht angezeigt, wenn ich die App starte. kannst du mir bitte helfen ?
PriyankaChauhan
79

Ab Android Studio v3 wurde Infer Constraint aus der Dropdown-Liste entfernt.

Verwenden Sie das Zauberstabsymbol im Symbolleistenmenü über der Entwurfsvorschau. Es gibt die Schaltfläche " Infer Constraints ". Klicken Sie auf diese Schaltfläche. Dadurch werden automatisch einige Zeilen in das Textfeld eingefügt und die rote Zeile wird entfernt.

Geben Sie hier die Bildbeschreibung ein

Gvtha
quelle
1
In meinem Fall wird nur eine Ignorierbedingung hinzugefügt, aber das Problem wird nicht
behoben
Diese Lösung ist einfacher als die oberste. Funktioniert aber nur für AS v3 und höher.
Yohanes AI
42

Kopieren Sie diesen Code einfach in alle Komponenten, die Sie ziehen möchten.

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

Beispiel:

<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 Montenegro
quelle
4
Aber wieso? Können Sie die Details erklären?
Prathamesh Mehr
22

Gehen Sie zum Design und klicken Sie mit der rechten Maustaste auf Ihr Widget, Einschränkungslayout >> Einschränkungen ableiten. Sie können feststellen, dass Ihrem Text automatisch Code hinzugefügt wurde.

Atul Chavan
quelle
Ja, die Infer-Einschränkungen verwenden die in der Datei activity.xml angegebenen Standardwerte
Rohan Gala
5
Follow these steps:
Right click on designing part > Constraint Layout > Infer Constraints
Makvin
quelle
4

Wenn ConstraintsSie auf den Fehler schließen, verwenden Sie einfach diesen Code:

app:layout_constraintBottom_toBottomOf="parent"
user8622246
quelle
2

Sie müssen das EditTextvom Rand des Layouts ziehen und nicht nur das andere Widget. Sie können Einschränkungen auch hinzufügen, indem Sie einfach den Einschränkungspunkt, der das Widget umgibt, an den Bildschirmrand ziehen, um die angegebenen Einschränkungen hinzuzufügen.

Der geänderte Code sieht ungefähr so ​​aus:

    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.
quelle
1

Gehen Sie zum XML-Layout-Text, in dem das Widget (Schaltfläche oder andere Ansicht) einen Fehler anzeigt, fokussieren Sie den Cursor dort und drücken Sie alt+ enterund wählen Sie fehlende Einschränkungsattribute aus.

KeyBoardBoy
quelle
Es gibt auch eine Warnmeldung, dass die fest codierte Zeichenfolge "TextView" die @ string-Ressource verwenden sollte
Mohammad Heydari
1

Zum Beispiel habe ich das

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

Verwenden Sie das RelativeLayout-Layout wie folgt

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

Wechseln Sie einfach in die Entwurfsansicht und suchen Sie das betreffende Widget. Nehmen Sie einen der Punkte an der Grenze des Widgets und verbinden Sie ihn mit einem geeigneten Rand des Bildschirms (oder mit einem Punkt auf einem anderen Widget).

Wenn es sich bei dem Widget beispielsweise um eine Symbolleiste handelt, nehmen Sie einfach den obersten Punkt und verbinden Sie ihn mit dem obersten Rand des Telefonbildschirms, wie im Bild gezeigt.

Designansicht

Sunit Gautam
quelle
1
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"

Das hilft mir sehr

Wanja Rachel
quelle
-3

Sie müssen sich ändern androidx.constraintlayout.widget.ConstraintLayoutzu RelativeLayout.

Youness Labghough
quelle