Czy można ustawić bezwzględną pozycję widoku w Androidzie? (Wiem, że istnieje AbsoluteLayout
, ale jest przestarzałe ...)
Na przykład, jeśli mam ekran o wymiarach 240 x 320 pikseli, jak mogę dodać obraz o ImageView
wymiarach 20 x 20 pikseli, tak aby jego środek znajdował się na pozycji (100 100)?
view.setTranslationX()
lubview.offsetLeftAndRight()
Odpowiedzi:
Możesz użyć RelativeLayout. Powiedzmy, że chciałeś mieć ImageView 30x40 w pozycji (50,60) wewnątrz swojego układu. Gdzieś w twojej działalności:
Więcej przykładów:
Umieszcza dwa 30x40 ImageViews (jeden żółty, jeden czerwony) odpowiednio w (50,60) i (80,90):
Umieszcza jeden 30x40 żółty ImageView w (50,60), a drugi 30x40 czerwony ImageView <80,90> względem żółtego ImageView:
źródło
ImageView
do dodania, czy nie lepiej byłoby użyćFrameLayout
?Zasadniczo można dodać widok w określonej pozycji za pomocą FrameLayout jako kontenera, określając atrybuty leftMargin i topMargin .
Poniższy przykład umieści ImageView 20x20px w pozycji (100,200) przy użyciu FrameLayout jako kontenera pełnoekranowego:
XML
Aktywność / fragment / widok niestandardowy
To załatwi sprawę, ponieważ marginesów można użyć jako współrzędnych bezwzględnych (X, Y) bez RelativeLayout:
źródło
Aby dodać do powyższej odpowiedzi Andy Zhanga, jeśli chcesz, możesz podać parametr rl.addView, a następnie wprowadzić zmiany w późniejszym czasie, aby:
Równie dobrze można zapisać jako:
Więc jeśli zachowasz zmienną params, możesz zmienić układ iv w dowolnym momencie po dodaniu go do rl.
źródło
Bardziej przejrzysty i dynamiczny sposób bez twardego kodowania wartości pikseli w kodzie.
Chciałem ustawić okno dialogowe (które nadmuchuję w locie) dokładnie pod klikniętym przyciskiem.
i rozwiązałem to w ten sposób:
Musisz jednak upewnić się, że układ nadrzędny
myView
jest instancjąRelativeLayout
.pełniejszy kod:
W ten sposób nadal możesz oczekiwać, że widok docelowy dostosuje się do dowolnych parametrów układu ustawionych za pomocą plików XML układu, zamiast kodować te piksele / dps w kodzie Java.
źródło
Umieść dowolny widok na pożądanym punkcie X i Y
plik układu
Klasa Java
Gotowe
źródło
Na wszelki wypadek może komuś pomóc, możesz również wypróbować tego animatora ViewPropertyAnimator, jak poniżej
kredyty do odpowiedzi bpr10
źródło
Wypróbuj poniższy kod, aby ustawić widok w określonej lokalizacji: -
źródło
Mój kod dla Xamarin , używam w tym celu FrameLayout, a oto mój kod:
Przydało mi się to, ponieważ potrzebowałem, aby właściwość widoku nakładała się na siebie na podstawie ich wyglądu, np. Widoki były ułożone jeden na drugim .
źródło