Widzę, że jest to prawdopodobnie pytanie noobowe, ale naprawdę mnie dezorientuje.
Czytam dokumenty z Google Material Design, wraz z niektórymi jego implementacjami w css. Specyfikacja jest napisana w Androidzie dp
, a kody css są używane px
jako jednostki długości.
To, co mnie dezorientuje, to fakt, że implementacje css często używają dokładnej wartości ze specyfikacji, na przykład toast powinien mieć :
Jednoliniowa wysokość paska przekąskowego: 48 dp wysokości
Minimalna szerokość: 288 dp
2 dp zaokrąglony róg
min-height: 48px;
min-width: 288px;
...
border-radius: 2px;
W moim obecnym rozumieniu system Android DP
jest generalnie wyświetlany w rozmiarze jednego piksela na ekranie o rozdzielczości 160 dpi, natomiast CSS px
jest definiowany jako kąt widzenia. Czy px
zdarza się, że dzieje się tak samo, jak dp
podczas patrzenia w pewnej odległości? Jeśli tak, to czy jest to powszechny wzorzec do użycia px
jak dp
w css, czy też całkowicie źle zrozumiałem kod CSS?
Wcześniej nic nie wiem na temat rozwoju Androida, a nie projektanta. Dziękuję za wszelką pomoc.
em/rem
s wszędzie, a następnie skalować podstawowy rozmiar czcionki dla każdej rozdzielczości.Odpowiedzi:
Myślę, że przyjęte jest złe. Css px to tak naprawdę piksel niezależny od urządzenia (dip), i często stosuje się px jako dp w css.
źródło
Uważam, że pełną odpowiedź na twoje pytanie można znaleźć tutaj:
/programming/2025282/difference-between-px-dp-dip-and-sp-in-android
Aby przekonwertować dp na px, należy wziąć pod uwagę wymiary wyświetlania, do których adresujesz. Im wyższy DPI, tym więcej pikseli będziesz musiał wcisnąć w ten sam obszar, aby wyglądał dobrze i uniknął pikselacji :
ldpi: 1 dp = 0,75 px
mdpi: 1 dp = 1 px
hdpi: 1 dp = 1,5 px
xhdpi: 1 dp = 2 px
xxhdpi: 1 dp = 3 px
xxxhdpi: 1 dp = 4 px
Na przykład:
Kwadrat dp 3x3 w CSS lub Photoshopie musi być:
2,25 x 2,25 px - ldpi
3x3 px - mdpi (Samsung ACE, Xperia X8)
6x6 px - xhdpi (Xperia S, Google Nexus 4)
9x9 px - xxhdpi (Samsung S4 - S5, HTC One)
12x12 px - xxxhdpi (ten resolutin będzie używany na urządzeniach nowej generacji)
W oparciu o powyższe obliczenia powinny wyglądać tak, używając mnożnika dp 3x dla ekranów XXHDPI:
Android automatycznie skaluje obrazy, jeśli stwierdzi, że rozdzielczość używanego urządzenia jest niższa, więc możesz bezpiecznie tworzyć z myślą o XXHDPI, ponieważ odnosi się do większości dzisiejszych wysokiej klasy urządzeń na rynku.
Oto prosty konwerter, który wykona za Ciebie zadanie: http://androidpixels.net/
źródło
W3C mówi :
I choć mówi:
Mówi także:
Biorąc pod uwagę, że domyślnie urządzenia ekranowe są skonfigurowane jako 96dpi, najlepszym założeniem jest to, jak przeglądarki interpretują piksel CSS:
I wiemy, że w Androidzie:
Więc:
I zgodnie z tym:
Cóż, myślałem, że tak było, dopóki nie sprawdziłem rozmiarów tostów Google Polymer :
Jest to więc konwersja 1 do 1, z której otrzymaliśmy przeglądarki Androida:
A 96 css-px na cal jest używane na innych urządzeniach, takich jak komputery stacjonarne i laptopy.
Podsumowując: piksele css są niezależne od dpi urządzenia, a na urządzeniach z Androidem 1 css-px jest równy 1dp.
źródło
Nie ma jednej właściwej odpowiedzi, w rzeczywistości są dwie:
Uwaga: ogólny pomysł: na dole strony: Skalowanie obrazu z pewnym obrazem w celu wizualizacji współczynników dla wielu progów rozdzielczości ekranu (obraz punktu przerwania)
Oto bardziej szczegółowe informacje dla tych, którzy chcą bardziej zagłębić się w temat, ale jest to wyjaśnienie i logika, powyższe jest kompletną odpowiedzią :
Chodzi o to, że „gęstość pikseli”, zgodnie z oficjalnym przewodnikiem Material Design (Układ> Jednostki i pomiary), to:
Więc w zasadzie gęstość pikseli to nowa nazwa dla wartości ppi lub ponieważ wiele osób nie uznają tego jako osobny rzeczy, wartość dpi.
Definicja 1dp według tego samego przewodnika:
Podstawową zasadą projektowania materiałów jest utrzymanie spójnych wymiarów fizycznych na różnych platformach, co podnosi kwestię rozdzielczości pulpitu, ppi (/ dpi) i piksela css, w którym to przypadku należy trzymać się obliczania dp, tak jak w przypadku Androida urządzenia i nie jest prawdą, że większość ekranów ma 96ppi (to założenie jest ważne dla CSS), duża część z nich ma nieco wyższe ppi, a jeśli weźmie się pod uwagę nie tylko tradycyjny pulpit, ale także zwykłe laptopy lub tablety lub „programy konwertowalne”, takie jak Surface, istnieje potrzeba konwersji: zwykle wynoszą one od 100 do 130 ppi, co oznacza, że obecnie używam 127 ppi:
100% = 160ppi -> szerokość fizyczna 1 piksel = 1dp -> prostokąt 100x100px = 100x100dp
79% = 127ppi -> szerokość fizyczna 1 piksel = ca. 0,8dp -> prostokąt 100x100px = 80x80dp
Chociaż dp jest czystą i nową jednostką tylko dla Androida, należy wykonać pewne obliczenia w celu dostosowania układów MD, które wszystkie są dostępne w dp. Jeśli chcesz mieć więcej wyobrażenia o tym, jak duży będzie konkretny element w sensie fizycznym, najbardziej przydatna do celów pytania jest idealna wartość zakresu wielkości dotyku w wytycznych projektowania materiałów dla określonych urządzeń ** Poniżej wartości dp znajduje się fizyczny. ** Wartość dp zmienia się, ale wartość fizyczna pozostaje taka sama.
Problem, dlaczego należy obliczać jednostki, jest wyjaśniony w przewodniku API Androida (Konwersja jednostek dp na jednostki pikseli) i nadal dotyczy elementów stylizowanych za pomocą CSS:
Wspomniana wcześniej konwersja polimeru 1: 1 prawdopodobnie wynika z faktu, że gęstość 96dpi, a nawet ta, którą podałem, jest gdzieś w niskiej gęstości, a nawet (jak w przypadku 96dpi), nawet poniżej tej grupy. Biorąc pod uwagę, że wartość dp nie jest akceptowana przez css, łatwiej jest założyć, że współczynnik gęstości (0,75 - dla niskiego, 1,0 medium i tak dalej) jest tym, który należy zastosować dla uproszczenia i wielokrotnego rozmiaru obsługa ekranów, która jest pokazana w tabeli urządzeń dla Material Design wspomnianej wcześniej. Jest nawet wymieniany jako jedna z najlepszych praktyk w cytowanym powyżej rozdziale przewodnika API Androida. I właśnie tam konwersja polimerów 1: 1 może być dobra, ponieważ wiele urządzeń ma współczynnik gęstości na poziomie 1.
Wracając do ostatniego dylematu: css px, jeśli zdecydujesz się zanurzyć w subtelne niuanse różnych urządzeń. Jeśli nie jesteś tak dociekliwy, po prostu trzymaj się współczynnika gęstości z tabeli MD. Ale jeśli jesteś perfekcjonistą, to sedno relacji pikseli CSS i wymiarów fizycznych ma idealne (i dość proste wyjaśnienie) w Rekomendacji dla kandydatów W3C:
Ta nowa definicja px (biorąc pod uwagę wymiary fizyczne) wypełnia lukę między pikselami CSS a dps i pozwala nam upewnić się, że dzięki prostym obliczeniom pomiarowym tak zwane środowisko wyjściowe, które w tym przypadku jest spójne (w sensie fizycznym) ) Układ MD pozostaje taki sam na różnych urządzeniach i platformach. Co więcej, zarówno wytyczne W3C, jak i MD wykorzystują zdjęcia urządzeń o niskiej i wysokiej rozdzielczości, aby zilustrować podstawową ideę pokrycia pikseli / kropek - potrzeba więcej pikseli urządzenia (kropek), aby pokryć obszar o wymiarach 1 x 1 x 1 na urządzeniu o wysokiej rozdzielczości niż w niskiej rozdzielczości, co oznacza, że szeroko stosowane w zapytaniach CSS do wyświetlania siatkówki są rzeczywiście tym samym, co musisz podać (ale z większą liczbą progów) dla Material Design i wszystkich urządzeń mobilnych.
Podsumowując, użyj współczynnika gęstości MD, który jest najlepszą zalecaną praktyką Google , lub jeśli jesteś skupiony na precyzji lub twój projekt musi być absolutnie spójny pod względem rozmiarów fizycznych: użyj dokładnej konwersji przy użyciu wartości ppi / dpi dla określonego lub wspólnego urządzenia (co jest dość szalone), co można łatwo przetestować w internetowym narzędziu Google Resizer, ponieważ przestrzegają one wspólnych progów sugerowanych w MD Guide w pierwszej kolejności i reguł podziału dla współczynnika i odpowiednich nazw wyświetlanych typów (xlarge, medium i tak dalej) ) zaimplementowane w nim.
Więc trzymaj się współczynników MD z tabeli, pamiętając, że referencyjny dp równy rozmiar piksela jest dla rozdzielczości mdpi (160) i będziesz dobry.
źródło