Czy można ustawić Marginesy liniowego liniowo, programowo, ale nie za pomocą pikseli, ale dp?Marginesy linii LinearLayout, programowo z dp
Odpowiedz
Można użyć DisplayMetrics i określić gęstość ekranu. Coś w tym stylu:
int dpValue = 5; // margin in dips
float d = context.getResources().getDisplayMetrics().density;
int margin = (int)(dpValue * d); // margin in pixels
Jak pamiętam, lepiej użyć wykładzin podłogowych do przesunięć i zaokrągleń dla szerokości.
miałem ten sam problem i stosować tę technikę, aby go rozwiązać:
pierwsze, dodałem plik xml do moich RES/wartości folder o nazwie dimensions.xml. Wygląda to tak:
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<dimen name="my_margin">5dip</dimen>
</resources>
Po drugie, w moim kodu, mam odpowiednik piksela tego marginesu następująco (zauważ Używam Xamarin więc to jest kod C#, ale czysta wersja Java powinna być bardzo podobna):
int myMarginPx = Resources.GetDimensionPixelSize(Resource.Dimension.my_margin);
Wreszcie, tworzę moje params układ:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent);
layoutParams.SetMargins(myMarginPx, myMarginPx, myMarginPx, myMarginPx);
Stary, Wielkie dzięki, ten kod mi pomaga. –
w formie android java, powinno to być: 'int getDimenInt (kontekst kontekstowy, @DimenRes int dimenRes) { return context.getResources(). GetDimensionPixelSize (dimenRes); } ' –
można konwertować DP px, na przykład konwertować 5DP do px:
Resources r = mContext.getResources();
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, r.getDisplayMetrics());
Poniższa metoda działa dla mnie do konwersji pikseli DP:
int pixelToDP(int pixel) {
final float scale = RaditazApplication.getInstance().getResources().getDisplayMetrics().density;
return (int) ((pixel * scale) + 0.5f);
}
konwersji DP wartości Pixel
int Whatever_valueInDP=10;//value in dp
int Value_In_Pixel= (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, Whatever_valueInDP, getResources()
.getDisplayMetrics());
- 1. pompowania TextView i LinearLayout programowo
- 2. Programowo dodaj obramowanie do LinearLayout
- 3. Jak programowo ustawić efekt Ripple na LinearLayout?
- 4. Jak programowo ustawić marginesy dla TextView?
- 5. jak programowo ustawić LinearLayout na dole FrameLayout?
- 6. Android - Ustaw program Layout_Gravity programowo dla LinearLayout
- 7. Dodawanie LinearLayout programowo Android nie działa
- 8. Wyśrodkuj marginesy liniowe i "procentowe"
- 9. Kwalifikatory zasobów Androida -sw # dp vs -w # dp
- 10. Nie działa marginesy na marginesie z ograniczeniami
- 11. Transparent LinearLayout na Androida
- 12. Android - Jak programowo ustawić styl przycisku w Linearlayout?
- 13. ListView marginesy
- 14. Czy zmiana tła powoduje również zmianę dopełnienia linii LinearLayout?
- 15. Uzyskiwanie elementów potomnych z LinearLayout
- 16. Problem z onclicklistener do LinearLayout
- 17. rozciągnięte obrazy tła przycisków (wrap_content lub użycie dp)
- 18. Widok android domyślne wypełnienie lub marginesy
- 19. Jak ustawić parametry układu dla jednostek dp android
- 20. ggplot2 marginesy obszaru wydruku?
- 21. Podziały linii i liczba linii w etykiecie Swift (programowo)
- 22. ClassCastException LinearLayout LayoutParams
- 23. Pozycjonowanie css marginesy ujemne z-index
- 24. Wypełnienie zewnętrzne i marginesy z murem/izotopem
- 25. Jak uzyskać wysokość w pikselach LinearLayout z layout_weight
- 26. analizować plik zrzutu pamięci HPROF z linii poleceń programowo
- 27. Problemy z uruchamianiem pakietu SSIS programowo iz linii poleceń (DTEXEC)
- 28. Czy dp jest taki sam jak dip?
- 29. Czy createScaledBitmap() używa px lub dp?
- 30. Relacja między dp - sp i PX
prostu jako komentarz: można również użyć TypedValue.applyDimensions(), ale wygląda na to, że jest lepszy, zobacz http://stackoverflow.com/questions/2406449/does-setwidthint-pixels-use-dip-or-px/2406790#2406790 (Romain Guy jest inżynierem Androida) – bigstones
+1 - I Mam parę widżetów, które zbudowałem w kodzie (nie używając XML), i możesz tam ustawić tylko piksele. Jak tylko określiłem wersję SDK, moje układy zwariowały. Użyłem tego, aby je naprawić ... Zawsze używaj XML dla układów Android !!! – tpow
Świetny fragment. Naprawdę. –