Chciałbym ograniczyć lewą i prawą stronę widoku do marginesów widoku nadrzędnego i sprawić, by wypełnił przydzieloną przestrzeń. Jednakże ustawienie szerokości do albo match_parent
lub wrap_content
wydaje się ten sam wynik.
Czy istnieje coś równoważnego match_constraints (w przeciwieństwie do match_parent i wrap_content)? Czy match_parent
i wrap_content
wpływają na układ, czy też są ignorowane w nowym układzie ograniczeń?
Uwielbiam ten nowy system układu dla mojej ulubionej platformy!
match_parent
nie działa dla Ciebie?Odpowiedzi:
match_parent
nie jest wspierany. W programie0dp
możesz myśleć o swoich ograniczeniach jako o „skalowalnych”, a nie „wypełniających to, co zostało”.Ponadto,
0dp
może być określony przez położenie, w którymmatch_parent
opiera się na jego rodzica w swojej pozycji (x, y, szerokość, wysokość)źródło
match_parent
nie jest dozwolone. Ale w rzeczywistości możesz ustawić szerokość i wysokość na 0dp i ustawić górne i dolne lub lewe i prawe ograniczenia na „rodzica”.Na przykład, jeśli chcesz mieć
match_parent
ograniczenie na szerokość elementu, możesz to zrobić w ten sposób:<TextView android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/>
źródło
Najwyraźniej
match_parent
jest:ConstraintLayout
ConstraintLayout
Jeśli więc chcesz, aby Twoje widoki funkcjonowały jako
match_parent
, to:ConstraintLayout
powinni stosować0dp
match_parent
Przykład:
<android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="16dp"> <android.support.design.widget.TextInputLayout android:id="@+id/phoneNumberInputLayout" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"> <android.support.design.widget.TextInputEditText android:id="@+id/phoneNumber" android:layout_width="match_parent" android:layout_height="wrap_content"/> </android.support.design.widget.TextInputLayout>
źródło
match_parent
nie jest obsługiwany przezConstraintLayout
. Ustaw szerokość na,0dp
aby dopasować ograniczenia.źródło
Z oficjalnego dokumentu :
Jeśli więc chcesz osiągnąć
MATCH_PARENT
efekt, możesz to zrobić:<TextView android:id="@+id/textView" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:text="TextView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" />
źródło
Możesz sprawdzić swój adapter.
1 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater); 2 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater, viewGroup, false);
Miałem taki sam problem jak Ty, kiedy użyłem 1. Możesz spróbować 2.
źródło
Aby Twój widok jako match_parent nie był możliwy bezpośrednio, ale możemy to zrobić w trochę inny sposób, ale nie zapomnij użyć atrybutu Left and Right z początkiem i końcem, bo jeśli używasz obsługi RTL, będzie to potrzebne.
<Button android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/>
źródło
ustaw szerokość lub wysokość (cokolwiek potrzebujesz, aby dopasować rodzica) do 0dp i ustaw marginesy lewego, prawego, górnego, dolnego, aby działały jako dopasowany rodzic
źródło
w dokumencie biurowym: https://developer.android.com/reference/android/support/constraint/ConstraintLayout
Gdy wymiar jest ustawiony na MATCH_CONSTRAINT, domyślnym zachowaniem jest to, że wynikowy rozmiar zajmuje całą dostępną przestrzeń.
Używając 0dp, co jest odpowiednikiem „MATCH_CONSTRAINT”
Ważne: MATCH_PARENT nie jest zalecany w przypadku widżetów zawartych w ConstraintLayout. Podobne zachowanie można zdefiniować za pomocą MATCH_CONSTRAINT z odpowiednimi ograniczeniami lewy / prawy lub górny / dolny ustawionym na „nadrzędny”
źródło
Jeśli chcesz, aby TextView znajdował się w środku elementu nadrzędnego ..
Twój główny układ to Układ ograniczeń
<androidx.appcompat.widget.AppCompatTextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="@string/logout" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" android:gravity="center"> </androidx.appcompat.widget.AppCompatTextView>
źródło
Znalazłem jeszcze jedną odpowiedź, gdy w widoku przewijania znajduje się układ ograniczeń, które musimy umieścić
android:fillViewport="true"
do widoku przewijania
i
android:layout_height="0dp"
w układzie ograniczeń
Przykład:
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="0dp"> // Rest of the views </androidx.constraintlayout.widget.ConstraintLayout> </ScrollView>
źródło