Chcę utworzyć układ, który pozwala mi przewijać w dół za pomocą układu z ograniczeniami, ale nie wiem, jak się do tego zabrać. Czy powinien ScrollView
być rodzicem ConstraintLayout
takiej osoby?
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<android.support.constraint.ConstraintLayout
android:id="@+id/Constraint"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Albo na odwrót? Może ktoś wskaże mi dobry tutorial na ten temat lub poda przykład, nie mogę go znaleźć.
Nie wiem też, czy to błąd, czy konfiguracja, której nie ustawiłem, ale widziałem takie obrazy:
gdzie są jakieś komponenty na zewnątrz "niebieskiego prostokąta" ale są widoczne, podczas gdy po mojej stronie, jeśli umieszczę komponent na "białej przestrzeni", nie mogę go zobaczyć ani nigdzie przenieść i pojawia się na drzewie komponentów .
AKTUALIZACJA :
Znalazłem sposób na przewijanie układu ograniczeń w narzędziu do projektowania, używając poziomej prowadnicy, aby przesunąć w dół obramowanie układu ograniczeń i rozciągnąć je poza urządzenie, a następnie można użyć prowadnicy jako nowego dołu układu ograniczeń do zakotwicz komponenty.
Istnieje rodzaj ograniczenia, które przerywa funkcję przewijania:
Tylko upewnij się, że nie używasz tego ograniczenia w żadnym widoku, gdy chcesz,
ConstraintLayout
aby Twój widok był przewijalnyScrollView
:Jeśli je usuniesz, twój zwój powinien działać.
Wyjaśnienie:
Ustawienie wzrostu dziecka tak, aby odpowiadało wysokości
ScrollView
rodzica, jest sprzeczne z tym, do czego ma on służyć. W większości przypadków chcemy, aby niektóre treści o rozmiarze dynamicznym dały się przewijać, gdy są większe niż ekran / ramka; dopasowanie wzrostu do rodzicaScrollView
wymusiłoby wyświetlenie całej treści w stałej ramce (wysokość elementu nadrzędnego), a tym samym unieważniło jakąkolwiek funkcję przewijania.Dzieje się tak również, gdy ustawiono zwykłe bezpośrednie komponenty podrzędne
layout_height="match_parent"
.Jeśli chcesz, aby element podrzędny elementu podrzędnego
ScrollView
odpowiadał wysokości elementu nadrzędnego, gdy nie ma wystarczającej ilości treści, po prostu ustaw wartośćandroid:fillViewport
true dlaScrollView
.źródło
Użyj NestedScrollView z widocznym obszarem true działa dobrze dla mnie
dla Androida x użyj tego
źródło
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Podsumowując, po prostu zawijasz
android.support.constraint.ConstraintLayout
widok wScrollView
tekście*.xml
pliku skojarzonego z układem.Przykład activity_sign_in.xml
Notatka 1: Paski przewijania pojawiają się tylko wtedy, gdy w jakikolwiek sposób potrzebne jest zawijanie, w tym wyskakująca klawiatura.
Uwaga 2: Nie byłoby również złym pomysłem upewnienie się, że Twój ConstraintLayout jest wystarczająco duży, aby sięgał do dołu i boków dowolnego ekranu, szczególnie jeśli masz tło, ponieważ zapewni to, że nie ma dziwnych białych znaków . Możesz to zrobić ze spacjami, jeśli nic innego.
źródło
Po prostu użyj układu ograniczeń wewnątrz
NestedScrollView
lubScrollView
.Otóż to. miłego kodowania.
źródło
Aby utworzyć przewijalny układ, układ jest poprawny. Nie będzie można go przewijać, dopóki nie będzie powodu do przewijania (tak jak w każdym innym układzie). Dodaj więc wystarczającą ilość treści, a będzie można ją przewijać, tak jak w przypadku każdego układu (liniowego, względnego itp.). Jednak podczas projektowania za pomocą ConstraintLayout i ScrollView nie można prawidłowo przewijać w trybie Blueprint ani projektowania .
Znaczenie:
Możesz stworzyć przewijalny ConstraintLayout, ale nie będzie on przewijał się poprawnie w edytorze z powodu błędu / scenariusza, który nie był brany pod uwagę. Ale chociaż przewijanie nie działa w edytorze, działa na urządzeniach. (Zrobiłem kilka przewijania COnstraintLayouts, więc przetestowałem to)
Uwaga
Odnośnie twojego kodu. W ScrollView brakuje zamykającego tagu, nie wiem, czy tak jest w pliku, czy też jest to błąd typu „kopiuj-wklej”, ale możesz chcieć go obejrzeć.
źródło
Aby uzupełnić poprzednie odpowiedzi dodaję następujący przykład, który również uwzględnia użycie AppBar. Z tym kodem wydaje się, że edytor projektowania Android Studio działa dobrze z ConstraintLayout.
źródło
musisz otoczyć mój układ ograniczenia znacznikiem ScrollView i nadać mu właściwość android: isScrollContainer = "true".
źródło
W wersji 2.2 występuje błąd uniemożliwiający przewijanie ConstraintLayout. Myślę, że nadal istnieje. Alternatywnie można użyć LinearLayout lub RelativeLayout.
Zobacz również: czy można umieścić układ ograniczeń wewnątrz ScrollView .
źródło
Układ ograniczeń jest ustawieniem domyślnym dla nowej aplikacji. „Uczę się teraz Androida” i bardzo trudno mi było wymyślić, jak obsłużyć domyślny „przykładowy” kod do przewijania, gdy klawiatura jest włączona. Widziałem wiele aplikacji, w których muszę zamknąć klawiaturę, aby kliknąć przycisk „wyślij”, a czasami nie znika. Używając tej hierarchii [ScrollView / ContraintLayout / Fields], teraz działa dobrze. W ten sposób możemy czerpać korzyści i łatwość użycia z ConstraintLayout w przewijalnym widoku.
źródło
Wyjmij dolny przycisk z zagnieżdżonego widoku przewijania i jako nadrzędny wybierz układ liniowy. Dodaj dolny i zagnieżdżony widok przewijania jako ich dzieci. Będzie działać absolutnie dobrze. W manifeście dla działania użyj tego - spowoduje to podniesienie przycisku, gdy klawiatura jest otwarta
źródło
Możesz użyć
HorizontalScrollView
i to również zadziała!źródło
Oto jak to rozwiązałem:
Jeśli używasz zagnieżdżonego ScrollView, tj. ScrollView w ConstraintLayout, użyj następującej konfiguracji dla ScrollView zamiast „WRAP_CONTENT” lub „MATCH_PARENT”:
źródło
w widoku scrollview ustaw wysokość i szerokość 0, dodaj ograniczenia Top_toBottomOfand Bottom_toTopOf i to wszystko.
źródło
Wydaje mi się, że żadna z sugestii dotyczących usuwania dolnych ograniczeń ani ustawiania kontenera przewijania na wartość true nie działa. Co zadziałało: zwiększ wysokość pojedynczych / zagnieżdżonych widoków w moim układzie, aby „rozciągały się” poza element nadrzędny, używając opcji „Rozwiń w pionie” w Edytorze układu ograniczeń, jak pokazano poniżej.
W każdym podejściu ważne jest, aby kropkowane linie podglądu rozciągały się pionowo poza górne lub dolne wymiary elementu nadrzędnego
źródło