2014-07-01 11 views
17

Uważam, że metody getDimension i getDimensionPixelSize są mylące.Android: Dlaczego getDimension i getDimensionPixelSize oba zwracają to samo?

Wyglądałoby na to, że getDimension zwróci rzeczywistą wartość przechowywaną w wymiarze, na przykład 10dp i getDimensionPixelSize zwrócą ją przekonwertowaną na px.

Ale oba wydają się zrobić to samo ...

+2

Być może gęstość ekranu urządzenia to mdpi? Wtedy będą takie same. –

+0

To bardzo dobre pytanie. Też się nad tym zastanawiałem. Dokumentacja [getDimension] (http://developer.android.com/reference/android/content/res/Resources.html#getDimension%28int%29) jest w rzeczywistości nieoptymalna, ponieważ sformułowanie i nazewnictwo są niejasne i nie jest jasne, która jednostka jest rzeczywiście wyjściem. Dzięki za to pytanie. – Trilarion

Odpowiedz

32

getDimension() zwraca zmiennoprzecinkowy która jest wartością Dimen regulować z aktualnymi wyświetlania danych:

getDimensionPixelSize() zwraca całkowitą. Jest on taki sam jak getDimension() w zaokrągleniu do int o dowolnym niezerowym wymiarze, o ile ma co najmniej jeden piksel.

Dla wartości wymiaru całkowitego zwracają tę samą wartość liczbową.

+5

Zastanawiam się, co tak naprawdę oznacza "skorygowany z aktualnymi wskaźnikami wyświetlania"? – Trilarion

+1

@Trilarion To głównie oznacza, że ​​dla wartości określonych w 'dp', będą one konwertowane na piksele na podstawie gęstości ekranu. Na przykład wymiar "5dp" dla ekranu 'xhdpi' zostałby zwrócony jako 10 (piksele). Podobnie dla wartości w 'sp' i itp. (Chociaż rzeczywista formuła będzie się różnić dla każdego) – Melllvar

3

Wydaje mnie oczywiste, że robisz swoje badania na urządzeniu MDPI lub emulatorze.
Na wyświetlaczach mdpi, 1px = 1dp.

Po prostu przetestuj metody na ekranie o innej gęstości: o innej gęstości:.


Zauważ, że

public float getDimension (int id) 

Retrieve a dimensional for a particular resource ID. 
Unit conversions are based on the current DisplayMetrics associated with the resources. 

Parameters 
id The desired resource identifier, as generated by the aapt tool. 
This integer encodes the package, type, and resource entry. The value 0 is an invalid identifier. 

Returns 
Resource dimension value multiplied by the appropriate metric. 

Tak więc, jeśli urządzenie jest ustawiane w pikselach w układzie xml, dostaniesz surowy px (nieprzetworzony).
W przeciwnym razie, jeśli prawidłowo ustawisz jednostkę w dp w układzie xml, otrzymasz poprawną konwersję do px.

+0

Nie został przekonwertowany na dp, ale dp został przekonwertowany na px. Przetestowałem na urządzeniu o innej gęstości i getDimension zwraca skalowaną wartość. – user3591115

+0

Dobrze. Poprawiono moją odpowiedź. –

+0

Myślę, że oficjalna dokumentacja mogłaby zostać ulepszona tutaj. Czym jest "wymiarowy"? Co znaczy "opiera się na ..."? Dlaczego nie mogą po prostu powiedzieć, że konwertują na piksel za pomocą DisplayMetrics? – Trilarion

Powiązane problemy