Δημιούργησα την εφαρμογή μου με το ύψος και το πλάτος να δίνονται σε pixels για μια συσκευή Pantech της οποίας η ανάλυση είναι 480x800.
Πρέπει να μετατρέψω το ύψος και το πλάτος για μια συσκευή G1. Σκέφτηκα ότι η μετατροπή σε dp θα λύσει το πρόβλημα και θα δώσει την ίδια λύση και για τις δύο συσκευές.
Υπάρχει κάποιος εύκολος τρόπος να μετατρέψω τα pixels σε dp; Καμία πρόταση;
// Converts 14 dip into its equivalent px
float dip = 14f;
Resources r = getResources();
float px = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
dip,
r.getDisplayMetrics()
);
Θα πρέπει να χρησιμοποιείτε τα dp όπως ακριβώς θα χρησιμοποιούσατε τα pixels. Αυτό είναι το μόνο που είναι, ανεξάρτητα εικονοστοιχεία απεικόνισης. Χρησιμοποιήστε τους ίδιους αριθμούς που θα χρησιμοποιούσατε σε μια οθόνη μεσαίας πυκνότητας και το μέγεθος θα είναι μαγικά σωστό σε μια οθόνη υψηλής πυκνότητας.
Ωστόσο, φαίνεται ότι αυτό που χρειάζεστε είναι η επιλογή fill_parent στο σχεδιασμό της διάταξής σας. Χρησιμοποιήστε το fill_parent όταν θέλετε η προβολή ή το στοιχείο ελέγχου σας να επεκταθεί σε όλο το υπόλοιπο μέγεθος του γονικού περιέκτη.
Τα PX
και DP
είναι διαφορετικά αλλά παρόμοια.
Το DP
είναι η ανάλυση όταν λαμβάνετε υπόψη μόνο το φυσικό μέγεθος της οθόνης. Όταν χρησιμοποιείτε το DP
θα κλιμακώσει τη διάταξή σας σε άλλες οθόνες παρόμοιου μεγέθους με διαφορετική πυκνότητα pixel
.
Περιστασιακά όμως θέλετε πραγματικά pixels
, και όταν ασχολείστε με διαστάσεις στον κώδικα έχετε πάντα να κάνετε με πραγματικά pixels
, εκτός αν τα μετατρέψετε.
Έτσι, σε μια συσκευή android, με οθόνη κανονικού μεγέθους hdpi
, το 800x480 είναι 533x320
σε DP
(πιστεύω). Για να μετατρέψετε το DP
σε pixels /1.5
, για να μετατρέψετε πίσω το *1.5
. Αυτό ισχύει μόνο για το ένα μέγεθος οθόνης και το dpi
, θα άλλαζε ανάλογα με το σχέδιο. Οι καλλιτέχνες μας όμως μου δίνουν pixels
και τα μετατρέπω σε DP
με την παραπάνω εξίσωση 1,5
.