pracuję nad api8 Androida. Chcę ustawić/umieścić widok na ekranie dynamicznie. ale do użycia setX i setY potrzebujemy API poziomu 11 i wyżej. jak możemy go użyć w API 8 lub czy jest na to alternatywa? Potrzebujesz pomocyAndroid - Używanie view.setX() i setY w api 8
Odpowiedz
Możesz to zrobić, korzystając z LayoutParams
. Można je dodać do składników interfejsu Android, aby ustalić ich granice i położenie.
Przykładem (ustawienie LayoutParams na widok dziecka z RelativeLayout)
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); //The WRAP_CONTENT parameters can be replaced by an absolute width and height or the FILL_PARENT option)
params.leftMargin = 50; //Your X coordinate
params.topMargin = 60; //Your Y coordinate
childView.setLayoutParams(params);
zwrócić uwagę, że typ LayoutParams musi być równa rodzica childview chcesz je dodać. (LinearLayout.LayoutParams
dla LinearLayout
, dla RelativeLayout
itp.).
Ponadto zamiast childView.setLayoutParams(params);
można również użyć ustawienia parentView.addView(childView,params);
, aby ustawić Layoutparamy po dodaniu elementu do kontenera nadrzędnego.
UWAGA! Wartości współrzędnych podano w pikselach. Ponieważ jest to najlepsza praktyka, aby użyć wartości DP, aby zdefiniować swoje rozmiary interfejsu można użyć tego fragmentu kodu do konwersji DP pikseli:
private int getPixels(int dipValue){
Resources r = getResources();
int px = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, r.getDisplayMetrics());
return px;
}
aditionally powyżej (odpowiedź Leona Lucardie użytkownika), jeśli widok jest GroupView a gdy jej czym powinien widoku krawędzie, aby wyjść na zewnątrz ekranu, trzeba również umieścić:
params.rightMargin=currentRightMargin -yourX;
params.bottomMargin=currentBottomMargin -yourY;
w celu uniknięcia zakłóceń w obrębie wewnętrznej układu widoku za
można użyć http://nineoldandroids.com/ i mają wsparcie API z poziomu 1, w ten sposób :
ViewPropertyAnimator.animate(view).translationYBy(-yourY).setDuration(0);
dzięki Leon, to jest dokładnie to, czego potrzebuję. Dziękuję! – manojmore
@manojmore can u pls wyślij mi kod demo dla tego. Próbowałem tego, ale nie otrzymuję wyniku. Coś jest nie tak myślę. –
są te wartości w DP lub pikselach? –