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>

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


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


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

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.


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

4

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

app:layout_constraintBottom_toBottomOf="parent"

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" 

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ń.


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"

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


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

To mi bardzo pomaga


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.