Ten widok nie jest ograniczony w pionie. W czasie wykonywania przeskoczy w lewo, chyba że dodasz wiązanie pionowe

102

wprowadź opis obrazu tutajNowy edytor układów w Android Studio 2.2 nadal wyświetla ten błąd w widokach, takich jak EditText i Buttons. uprzejmie pomoc. również wszelkie linki pomagające we wdrożeniu nowego układu ograniczeń będą mile widziane.

kod:

<?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
źródło
Jaki błąd? Opisz swój rzeczywisty problem. To za mało szczegółów.
Lexi,
czy możesz udostępnić swój kod xml?
Janki Gadhiya
Po zakończeniu tworzenia układu wiązań kliknij przycisk, aby automatycznie dodać wszystkie brakujące wiązania.
Alex Cohn
1
przycisk? masz na myśli czerwoną żarówkę? nie pokazuje żadnych opcji automatycznego dodawania brakujących wiązań.
onexf

Odpowiedzi:

82

Układ ograniczeń ma na celu zmniejszenie hierarchii układów i poprawę wydajności układów (technicznie rzecz biorąc, nie musisz wprowadzać zmian dla różnych rozmiarów ekranu, brak nakładania się, działa jak urok na telefonie komórkowym, a także na karcie z tymi samymi ograniczeniami). pozbywasz się powyższego błędu, gdy używasz nowego edytora układu.

wprowadź opis obrazu tutaj

Kliknij małe kółko i przeciągnij je w lewo, aż zmieni kolor na zielony, aby dodać lewe ograniczenie (podaj liczbę, powiedzmy x dp. Powtórz to z pozostałymi stronami i pozostaw dolne ograniczenie puste, jeśli masz pod nim inny widok . wprowadź opis obrazu tutaj

Edycja: zgodnie z witryną dla programistów, zamiast dodawać ograniczenia do każdego widoku podczas umieszczania ich w układzie, możesz przenieść każdy widok na żądane pozycje, a następnie kliknąć opcję Rozważ ograniczenia, aby automatycznie utworzyć ograniczenia. więcej tutaj

onexf
źródło
Właśnie dodałem widok obrazu w układzie przeciwwskazań, ale nie jest wyświetlany, gdy uruchamiam aplikację. możesz mi pomóc ?
PriyankaChauhan
79

Od wersji Android Studio v3 i nowszych Infer Constraint został usunięty z listy rozwijanej.

Użyj ikony różdżki w menu paska narzędzi nad podglądem projektu; jest przycisk „ Infer Constraints ”. Kliknij ten przycisk, spowoduje to automatyczne dodanie niektórych linii w polu tekstowym, a czerwona linia zostanie usunięta.

wprowadź opis obrazu tutaj

Gvtha
źródło
1
W moim przypadku dodaje tylko ograniczenie ignorowania, ale nie rozwiązuje problemu
mrroot5
to rozwiązanie jest łatwiejsze niż najlepsze. Ale działa tylko dla AS v3 i nowszych.
Yohanes AI
44

Po prostu skopiuj ten kod do wszystkich komponentów, które będziesz przeciągać.

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

przykład:

<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
źródło
6
Ale dlaczego? Czy możesz wyjaśnić jego szczegóły?
Prathamesh More
22

Przejdź do projektu, kliknij prawym przyciskiem myszy na swoim widżecie, Układ ograniczeń >> Rozważ ograniczenia. Możesz zauważyć, że jakiś kod został automatycznie dodany do twojego tekstu.

Atul Chavan
źródło
Tak, ograniczenia wnioskowania używają wartości domyślnych określonych w pliku activity.xml
Gala Rohanu,
5
Follow these steps:
Right click on designing part > Constraint Layout > Infer Constraints
Makvin
źródło
4

Jeśli wnioskowanie Constraintsnadal daje błąd, po prostu użyj tego kodu:

app:layout_constraintBottom_toBottomOf="parent"
user8622246
źródło
2

Musisz przeciągnąć EditTextz krawędzi układu, a nie tylko z drugiego widżetu. Możesz także dodać ograniczenia, po prostu przeciągając punkt ograniczenia otaczający widżet do krawędzi ekranu, aby dodać ograniczenia zgodnie z opisem.

Zmodyfikowany kod będzie wyglądał podobnie do tego:

    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.
źródło
1

Przejdź do tekstu układu XML, w którym widżet (przycisk lub inny widok) wskazuje błąd, ustaw kursor w tym miejscu i naciśnij alt+ enteri wybierz brakujące atrybuty ograniczeń.

KeyBoardBoy
źródło
Zawiera również ostrzeżenie, że zakodowany ciąg znaków „TextView” powinien używać zasobu @string
Mohammad Heydari
1

na przykład mam to

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

użyj układu RelativeLayout w ten sposób

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
ibrahim mert
źródło
1

Po prostu przełącz się do widoku projektu i zlokalizuj odpowiedni widżet. Chwyć jedną z kropek na granicy widżetu i połącz ją z odpowiednią krawędzią ekranu (lub kropką na innym widżecie).

Na przykład, jeśli widżet jest paskiem narzędzi, po prostu chwyć najwyższą kropkę i połącz ją z najwyższą krawędzią ekranu telefonu, jak pokazano na obrazku.

Widok projektu

Sunit Gautam
źródło
1
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"

To mi bardzo pomaga

Vanya Rachel
źródło
-3

Trzeba zmienić androidx.constraintlayout.widget.ConstraintLayoutna RelativeLayout.

Youness Labghough
źródło