android - tutorial - ما هو الفرق بين "px" و "dip" و "dp" و "sp"؟




xml design android (20)

sp: scale بكسل مستقلة

يجب استخدامه مع النصوص لأنه يتم تحجيمه تلقائيًا وفقًا لحجم الخط المستخدم من قبل المستخدم في جهازه.

بكسل: عنصر بكسل أو صورة هو نقطة واحدة على الشاشة

ما هو الفرق بين وحدات android للقياس؟

  • بكسل
  • غطس
  • موانئ دبي
  • س

تعريفات

px أو dot هي بكسل على الشاشة الفعلية.

نقطة في البوصة هي بكسل لكل بوصة على الشاشة الفعلية وتمثل كثافة العرض.

يقدم Android أسماء مستعارة إلى كثافات متعددة

  • ldpi (منخفض) ~ 120dpi
  • mdpi (متوسطة) ~ 160dpi
  • hdpi (عالية) ~ 240dpi
    • معظم الأجهزة في عام 2015 هنا
  • xhdpi (عالية جدا) ~ 320dpi
    • Apple iPhone 4/5/6 ، Nexus 4
  • xxhdpi (خارج إضافية عالية) ~ 480dpi
    • جهاز Nexus 5
  • xxxhdpi (إضافية خارج إضافية عالية) ~ 640dpi

dip أو dp هي بكسلات indenpendant الكثافة ، أي أنها تتوافق مع بكسلات أكثر أو أقل بناءً على الكثافة المادية.

  • 1dp = 1px على mdpi

sp أو sip هو مقياس مستقل عن البكسل . يتم تحجيمها عند تشغيل خيار النص الكبير في الإعدادات > إمكانية الوصول

  • 1 ثانية = 1 نقطة
  • 1sp = 1.2dp مع إمكانية الوصول نص كبير

ماذا نستخدم؟

استخدم sp لحجم النص.

استخدم موانئ دبي لكل شيء آخر.


sp = scale بكسل مستقل

dp = dip = كثافة البكسلات المستقلة

نقطة في البوصة = نقطة في البوصة

يجب أن نتجنب استخدام sp .

يجب أن نستخدم dp لدعم الشاشات المتعددة.

يدعم Android درجات دقة الشاشة المختلفة

  • ldpi (منخفض) ~ 120 نقطة في البوصة
  • mdpi (medium) ~ 160 dpi
  • hdpi (عالية) ~ 240 نقطة في البوصة
  • xhdpi (عالي جدًا) ~ 320 نقطة في البوصة
  • xxhdpi (خارج إضافية عالية) ~ 480 نقطة في البوصة
  • xxxhdpi (إضافية خارج إضافية عالية) ~ 640 نقطة في البوصة

يحتوي جهاز ddp 120 dp على 120 بكسل في حجم 1 بوصة.

الشيء نفسه بالنسبة للكثافات الأخرى ...

يجب علينا كمهندسي برامج استخدام صيغة التحويل هذه:

بكسل = موانئ دبي * (الكثافة / 160)

لذلك سيكون لدى dp 1 في الجهاز 240 نقطة في البوصة = 1 * (240/160) = 3/2 = 1.5 بكسل.

و 1 dp 480 نقطة في البوصة لجهاز 1 = 1 * (480/160) = 3 بكسل.

باستخدام هذه المعرفة 1.5 و 3 بكسل ، يمكن لمهندس برامج تصميم تخطيطات لكثافات مختلفة.

للتحقق من معلمات الشاشة لأي جهاز:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

Toast.makeText(
    this,
    "4:" + metrics.heightPixels + "," + metrics.density + ","
    + metrics.densityDpi, Toast.LENGTH_LONG).show();

أود فقط استخدام موانئ دبي.

هناك الكثير من الحديث عن استخدام "sp" لأحجام الخطوط ، وبينما أنا أقدر هذه النقطة ، لا أعتقد أن هذا هو الشيء الصحيح الذي ينبغي عمله من وجهة نظر التصميم. يمكنك في نهاية المطاف كسر التصميم الخاص بك إذا كان المستخدم لديه بعض الاختيار بحجم خط مخيف ، وسيؤدي المستخدم في نهاية المطاف إلى إلقاء اللوم على التطبيق ، وليس خيارات حياته الخاصة.

أيضا ، إذا كنت تأخذ تطبيق sp-font على قرص 160 نقطة في البوصة ، سوف تجد أن كل شيء يتسلسل ... ولكن الخط الخاص بك ، والذي سوف تبدو صغيرة بالمقارنة. انها ليست نظرة جيدة.

في حين أن فكرة الخطوط "sp" تتمتع بقلب جيد ، إلا أنها فكرة سيئة. عصا مع موانئ دبي لكل شيء.


سأشرح المزيد عن كيفية تحويل dp إلى px بالضبط:

  • في حالة التشغيل على جهاز mdpi ، ستستهلك صورة 150 x 150 px 150 * 150 dp من مساحة الشاشة.
  • عند التشغيل على جهاز hdpi ، ستستهلك صورة 150 x 150 px 100 * 100 dp 150 x 150 px 100 * 100 dp من مساحة الشاشة.
  • في حالة التشغيل على جهاز xhdpi ، ستستهلك صورة بحجم 150x150 px × 150x150 px 75 * 75 dp × 75 * 75 dp 150x150 px من مساحة الشاشة.

في الاتجاه الآخر: لنقل أنك تريد إضافة صورة إلى تطبيقك وتحتاج إلى ملء عنصر تحكم 100 * 100 dp . ستحتاج إلى إنشاء صور بحجم مختلف لأحجام الشاشة المدعومة:

  • 100 * 100 px صورة 100 * 100 px لـ mdpi
  • 150 * 150 px صورة 150 * 150 px لـ hdpi
  • صورة 200 * 200 px لـ xhdpi

في الأساس ، يكون الوقت الوحيد الذي يتم تطبيق px فيه هو px واحد ، وهذا إذا كنت تريد بكسل واحدًا على الشاشة تمامًا كما في حالة الحاجز:

على> 160 نقطة في البوصة ، قد تحصل على 2-3 بكسل ،

على> 120 نقطة في البوصة ، تقريب إلى 0.


من وثائق مطوري أندرويد :

  1. بكسل
    وحدات البكسل - تتوافق مع وحدات البكسل الفعلية على الشاشة.

  2. في
    البوصات - على أساس الحجم المادي للشاشة.
    1 بوصة = 2.54 سنتيمتر

  3. مم
    ملليمتر - على أساس الحجم المادي للشاشة.

  4. حزب العمال
    النقاط - 1/72 من البوصة استناداً إلى الحجم الفعلي للشاشة.

  5. dp أو تراجع
    Density -independent Pixels - وحدة تجريدية تستند إلى الكثافة المادية للشاشة. هذه الوحدات نسبة إلى شاشة 160 نقطة في البوصة ، بحيث تكون dp واحدة بكسل واحد على شاشة 160 نقطة في البوصة. ستتغير نسبة dp-to-pixel مع كثافة الشاشة ، ولكن ليس بالضرورة في نسبة مباشرة. ملاحظة: يقبل المحول البرمجي كلاً من "dip" و "dp" ، على الرغم من أن "dp" أكثر تناسقًا مع "sp".

  6. س
    Scale -independent Pixels - يشبه هذا وحدة dp ، ولكن يتم أيضًا تحديد حجمها حسب تفضيل حجم الخط للمستخدم. من المستحسن استخدام هذه الوحدة عند تحديد أحجام الخطوط ، بحيث يتم ضبطها لكل من كثافة الشاشة وتفضيل المستخدم.

من Understanding Density Independence في Android :

+----------------+----------------+---------------+-------------------------------+
| Density Bucket | Screen Density | Physical Size | Pixel Size                    | 
+----------------+----------------+---------------+-------------------------------+
| ldpi           | 120 dpi        | 0.5 x 0.5 in  | 0.5 in * 120 dpi = 60x60 px   | 
+----------------+----------------+---------------+-------------------------------+
| mdpi           | 160 dpi        | 0.5 x 0.5 in  | 0.5 in * 160 dpi = 80x80 px   | 
+----------------+----------------+---------------+-------------------------------+
| hdpi           | 240 dpi        | 0.5 x 0.5 in  | 0.5 in * 240 dpi = 120x120 px | 
+----------------+----------------+---------------+-------------------------------+
| xhdpi          | 320 dpi        | 0.5 x 0.5 in  | 0.5 in * 320 dpi = 160x160 px | 
+----------------+----------------+---------------+-------------------------------+
| xxhdpi         | 480 dpi        | 0.5 x 0.5 in  | 0.5 in * 480 dpi = 240x240 px | 
+----------------+----------------+---------------+-------------------------------+
| xxxhdpi        | 640 dpi        | 0.5 x 0.5 in  | 0.5 in * 640 dpi = 320x320 px | 
+----------------+----------------+---------------+-------------------------------+
+---------+-------------+---------------+-------------+--------------------+
| Unit    | Description | Units Per     | Density     | Same Physical Size | 
|         |             | Physical Inch | Independent | On Every Screen    | 
+---------+-------------+---------------+-------------+--------------------+
| px      | Pixels      | Varies        | No          | No                 | 
+---------+-------------+---------------+-------------+--------------------+
| in      | Inches      | 1             | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| mm      | Millimeters | 25.4          | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| pt      | Points      | 72            | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| dp      | Density     | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+
| sp      | Scale       | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+

يمكن العثور على مزيد من المعلومات أيضًا في وثائق تصميم Google .

لحساب الأبعاد على الجهاز الحقيقي ، يمكن استخدام this التطبيق.


نقطة في البوصة -

  • النقاط لكل بوصة
  • قياس كثافة البكسل للشاشة.

بكسل - بكسل

  • لتخطيط بكسل الشاشة

نقطة - نقاط

  • حوالي 1/72 من البوصة ، فيما يتعلق بحجم الشاشة المادية.

بوصة - فيما يتعلق بحجم الشاشة الفعلية (1 بوصة = 2.54 سم).

mm-milimeter - فيما يتعلق بحجم الشاشة المادية.

بكسل ذات مقياس sp مستقلا.

  • بناءً على تفضيل حجم خط المستخدم.
  • يجب أن يكون الخط في "sp".

تراجع -

  • تراجع == موانئ دبي
  • كثافة مستقلة بكسل.
  • يختلف بناءً على كثافة الشاشة.
  • في شاشة 160 نقطة في البوصة ، 1 dp = 1 بكسل.
  • استخدم dp باستثناء حجم خط النص.

في المعيار ، وتستخدم dp و sp. لخط حجم و dp لكل شيء آخر.

صيغة لتحويل الوحدات:

px = dp * (نقطة في البوصة / 160) ؛

Density Bucket -> Screen Display => Physical Size        => Pixel Size                   

ldpi         -> 120 dpi          => 0.5 x 0.5 in         => 0.5 in * 120 dpi = 60x60 px   

mdpi         -> 160 dpi          => 0.5 x 0.5 in         => 0.5 in * 160 dpi = 80x80 px   

hdpi         -> 240 dpi          => 0.5 x 0.5 in         => 0.5 in * 240 dpi = 120x120 px  

xhdpi        -> 320 dpi          => 0.5 x 0.5 in         => 0.5 in * 320 dpi = 160x160 px  

xxhdpi       -> 480 dpi          => 0.5 x 0.5 in         => 0.5 in * 480 dpi = 240x240 px 

xxxhdpi      -> 640 dpi          => 0.5 x 0.5 in         => 0.5 in * 640 dpi = 320x320 px  

يمكن رؤية الفرق بين وحدات dp و sp المشار إليها بـ " تفضيل حجم خط المستخدم " بالإجابات المنسوخة من الوثائق الرسمية في وقت التشغيل من خلال تغيير Settings->Accessibility->Large Text .

Large Text خيار Large Text أكبر من 1.3 مرة.

private static final float LARGE_FONT_SCALE = 1.3f;

قد يكون هذا بالطبع معتمدًا على الموردين نظرًا لأنه يقع في packages/apps/Settings .


يمكنك رؤية الفرق بين px و dp من الصورة أدناه ، ويمكنك أيضًا العثور على أن px و dp لا يمكن أن dp نفس الأحجام الفعلية على الشاشات المختلفة.


المصدر 1

المصدر 2

المصدر 3 : (ترد البيانات من المصدر 3 أدناه)

هذه قيم البعد المعرفة في XML. يتم تحديد بعد برقم متبوعًا بوحدة قياس. على سبيل المثال: 10px ، 2in ، 5sp. تدعم وحدات Android وحدات القياس التالية:

موانئ دبي

وحدات البكسل المستقلة الكثافة - وحدة تجريدية تستند إلى الكثافة المادية للشاشة. هذه الوحدات نسبة إلى شاشة 160 نقطة في البوصة (نقطة لكل بوصة) ، حيث يساوي 1dp 1px تقريبًا. عند التشغيل على شاشة عالية الكثافة ، يتم قياس عدد البكسلات المستخدمة لرسم 1dp بواسطة عامل مناسب لشاشة نقطة في البوصة. وبالمثل ، عندما يكون على شاشة أقل كثافة ، يتم تقليل عدد وحدات البكسل المستخدمة لـ 1dp. ستتغير نسبة dp-to-pixel مع كثافة الشاشة ، ولكن ليس بالضرورة في نسبة مباشرة. يعد استخدام وحدات dp (بدلاً من وحدات px) حلاً بسيطًا لجعل أبعاد العرض في التخطيط الخاص بك متغيرة بشكل مناسب لكثافات الشاشة المختلفة. بمعنى آخر ، توفر هذه الميزة التناسق لأحجام العالم الحقيقي لعناصر واجهة المستخدم عبر الأجهزة المختلفة.

س

وحدات بكسل المستقلة - هذا يشبه وحدة dp ، ولكن يتم تحديد حجمه أيضًا حسب تفضيل حجم الخط للمستخدم. من المستحسن استخدام هذه الوحدة عند تحديد أحجام الخطوط ، بحيث يتم ضبطها لكل من كثافة الشاشة وتفضيل المستخدم.

حزب العمال

النقاط - 1/72 من البوصة استناداً إلى الحجم الفعلي للشاشة.

بكسل

بكسل - يتوافق مع وحدات البكسل الفعلية على الشاشة. لا يُنصح باستخدام وحدة القياس هذه نظرًا لأن التمثيل الفعلي يمكن أن يختلف باختلاف الأجهزة ؛ قد تحتوي كل أجهزة على عدد مختلف من وحدات البكسل لكل بوصة وقد تحتوي على وحدات بكسل إجمالية أكثر أو أقل على الشاشة.

مم

ملليمتر - بناءً على الحجم الفعلي للشاشة.

في

بوصة - بناء على الحجم المادي للشاشة.

ملاحظة: البُعد مورد بسيط تتم الإشارة إليه باستخدام القيمة المتوفرة في سمة الاسم (وليس اسم ملف XML). على هذا النحو ، يمكنك الجمع بين موارد الأبعاد والموارد البسيطة الأخرى في ملف XML واحد ، تحت عنصر واحد.


dp هو dip . استخدمه لكل شيء (الهامش ، الحشو ، إلخ).

استخدم sp لـ {text-size} فقط.

للحصول على نفس الحجم على كثافة الشاشة المختلفة ، يقوم Android بترجمة هذه الوحدات إلى بكسل في وقت التشغيل ، لذلك لا توجد رياضيات صعبة عليك القيام بها.

شاهد الفرق بين px و dp و sp على أحجام مختلفة للشاشة.

المصدر: Android Programming: The Big Nerd Ranch Guide


px Pixels - النقطة في المقياس تتوافق مع وحدات البكسل الفعلية على الشاشة.

في Inches - استنادًا إلى الحجم الفعلي للشاشة.

ملم ملليمتر - على أساس الحجم المادي للشاشة.

نقاط pt - 1/72 من البوصة استناداً إلى الحجم الفعلي للشاشة.

dp Density - Pixels مستقلة - وحدة تجريدية تستند إلى الكثافة المادية للشاشة. هذه الوحدات نسبة إلى شاشة 160 نقطة في البوصة ، بحيث تكون dp واحدة بكسل واحد على شاشة 160 نقطة في البوصة. ستتغير نسبة dp-to-pixel مع كثافة الشاشة ، ولكن ليس بالضرورة في نسبة مباشرة. ملاحظة: يقبل المترجم كلا dip و dp ، على الرغم من أن dp أكثر اتساقاً مع sp .

بكسل-بكسل المستقلة - هذا يشبه وحدة dp ، ولكن يتم أيضًا تحجيمها حسب تفضيل حجم الخط للمستخدم. من المستحسن استخدام هذه الوحدة عند تحديد أحجام الخطوط ، بحيث يتم ضبطها لكل من كثافة الشاشة وتفضيل المستخدم.

لنأخذ مثالاً لشاشتين بنفس الحجم ، لكن شاشتهما تبلغ 160 نقطة في البوصة (نقطة لكل بوصة ، أي بكسل لكل بوصة) والآخر هو 240 نقطة في البوصة.

                          Lower resolution   screen          Higher resolution, same size
Physical Width                      1.5 inches                        1.5 inches
Dots Per Inch (“dpi”)               160                               240
Pixels (=width*dpi)                 240                               360
Density (factor of baseline 160)    1.0                               1.5

Density-independent Pixels          240                               240
(“dip” or “dp” or “dps”)

Scale-independent pixels 
 (“sip” or “sp”)                  Depends on user font size settings    same

إليك الصيغة المستخدمة بواسطة Android:

px = dp * (نقطة في البوصة / 160)

حيث نقطة في البوصة واحدة من كثافات الشاشة التالية. للحصول على قائمة بجميع الكثافات الممكنة ، اذهب هنا

يعرف الثوابت "DENSITY_ *".

  • ldpi (منخفض) ~ 120dpi
  • mdpi (متوسطة) ~ 160dpi
  • hdpi (عالية) ~ 240dpi
  • xhdpi (عالية جدا) ~ 320dpi
  • xxhdpi (خارج إضافية عالية) ~ 480dpi
  • xxxhdpi (إضافية خارج إضافية عالية) ~ 640dpi

مأخوذة من هنا .

سيؤدي ذلك إلى فرز الكثير من الارتباك عند الترجمة بين px و dp ، إذا كنت تعرف شاشة نقطة في البوصة.

لنفترض أنك تريد صورة 60 نقطة لكل بوصة لشاشة hdpi ، ثم يكون حجم البكسل الفيزيائي 60 dp هو:

px = 60 * (240 / 160)

حجم الشاشة في Androidوتجميعها في فئات small، medium، large، extra large، double-extraو triple-extra. كثافة الشاشة هي كمية البيكسل داخل المنطقة (مثل البوصة) من الشاشة. بشكل عام يتم قياسه بالنقاط لكل بوصة (dpi). يتم تجميع كثافة الشاشة على أنها منخفضة ومتوسطة وعالية ومرتفعة للغاية. الدقة هي إجمالي عدد البكسل في الشاشة.

  • dp: الكثافة المستقلة للبكسل ، وهي تتباين بناءً على كثافة الشاشة. في شاشة 160 نقطة في البوصة ، 1 dp = 1 بكسل. باستثناء حجم الخط ، استخدم dp دائمًا.
  • تراجع: تراجع == موانئ دبي. في الإصدارات السابقة من Android تم استخدام dip وتغييرها لاحقًا إلى dp.
  • sp: Scale Independent Pixel ، تم قياسه بناءً على تفضيل حجم الخط للمستخدم. يجب أن تستخدم الخطوط sp.
  • بكسل: لدينا بكسل القياسي المعتاد الذي يعين على بكسل الشاشة.
  • في: بوصة ، فيما يتعلق بحجم الشاشة المادية.
  • mm: ملليمتر ، فيما يتعلق بحجم الشاشة الفعلي.
  • pt: 1/72 من البوصة ، بالنسبة إلى حجم الشاشة الفعلي.

صيغة للتحويل بين الوحدات

 px = dp * (dpi / 160)

dp إلى px في الجهاز

المثال التالي قد يساعد في فهم أفضل. يحدث القياس استنادًا إلى حجم الدلو 120 (ldpi) و 160 (mdpi) و 240 (hdpi) و 320 (xhdpi) و 480 (xxhdpi) و 640 (xxxhdpi). نسبة Google المقترحة للتصميم هي 3: 4: 6: 8: 12 لـ ldpi: mdpi: hdpi: xhdpi: xxhdpi

ستشغل صورة 150 بكسل × 150 بكسل ،

  • 150 dp X 150 dp screen space in mdpi
  • 100 dp X 100 dp screen space in hdpi
  • 75 dp X 75 dp مساحة شاشة في xhdpi

يمكنك استخدام حاسبة DPI التالية لإصلاح أحجام الصور والأبعاد الأخرى عندما ترغب في الحصول على تصميم موحد لواجهة المستخدم في جميع أجهزة Android.

DPI Calculator in Java

/*
Program output
LDPI: 165.0 X 60.0
MDPI: 220.0 X 80.0
HDPI: 330.0 X 120.0
XHDPI: 440.0 X 160.0
XXHDPI: 660.0 X 240.0
XXXHDPI: 880.0 X 320.0
*/


public class DPICalculator {

private final float LDPI = 120;
private final float MDPI = 160;
private final float HDPI = 240;
private final float XHDPI = 320;
private final float XXHDPI = 480;
private final float XXXHDPI = 640;    

private float forDeviceDensity;
private float width;
private float height;

public DPICalculator(float forDeviceDensity, float width, float height){
    this.forDeviceDensity = forDeviceDensity;
    this.width = width;
    this.height = height;
}

public static void main(String... args) {
    DPICalculator dpiCalculator = new DPICalculator(240,330,120);
    dpiCalculator.calculateDPI();
}


private float getPx(float dp, float value) {
    float px = dp * (value / forDeviceDensity );        
    return px;
}

private void calculateDPI() {

    float ldpiW = getPx(LDPI,width);        
    float ldpiH =  getPx(LDPI,height);
    float mdpiW = getPx(MDPI,width);        
    float mdpiH =  getPx(MDPI,height);        
    float hdpiW = getPx(HDPI,width);        
    float hdpiH =  getPx(HDPI,height);       
    float xdpiW = getPx(XHDPI,width);        
    float xdpiH =  getPx(XHDPI,height);
    float xxdpiW = getPx(XXHDPI,width);        
    float xxdpiH =  getPx(XXHDPI,height);
    float xxxdpiW = getPx(XXXHDPI,width);        
    float xxxdpiH =  getPx(XXXHDPI,height);

    System.out.println("LDPI: " + ldpiW + " X " + ldpiH);
    System.out.println("MDPI: " + mdpiW + " X " + mdpiH);
    System.out.println("HDPI: " + hdpiW + " X " + hdpiH);
    System.out.println("XHDPI: " + xdpiW + " X " + xdpiH);
    System.out.println("XXHDPI: " + xxdpiW + " X " + xxdpiH);
    System.out.println("XXXHDPI: " + xxxdpiW + " X " + xxxdpiH);        
   }
}

مزيد من المعلومات الرجوع إلى الرابط التالي.

http://javapapers.com/android/difference-between-dp-dip-sp-px-in-mm-pt-in-android/


حجم الشاشة يتم تجميع في الروبوت إلى فئات ldpi، mdpi، hdpi، xhdpi، xxhdpiو xxxhdpi. كثافة الشاشة هي كمية البيكسل داخل المنطقة (مثل البوصة) من الشاشة. بشكل عام يتم قياسه بالنقاط لكل بوصة ( dpi).

PX(Pixels):

  • لدينا بكسل القياسي المعتاد الذي يعين على بكسل الشاشة. pxيقصد بالبكسل المطلقة. يتم استخدام هذا إذا كنت تريد أن تعطي من حيث البيكسلات المطلقة للعرض أو الارتفاع. لا ينصح.

DP/DIP(Density pixels / Density independent pixels):

  • dip == dp. في الإصدارات السابقة من Android تم استخدام dip وتغييرها لاحقًا إلى dp. هذا بديل من px.

  • عموما لا نستخدمها أبدا pxلأنها قيمة مطلقة. إذا كنت تستخدم pxلتعيين العرض أو الارتفاع ، وإذا كان يتم تنزيل هذا التطبيق إلى أجهزة مختلفة بحجم الشاشة ، فلن يتم تمديد هذا العرض وفقًا للحجم الأصلي للشاشة.

  • dpينصح بشدة لاستخدامها بدلا من px. استخدم هذا الخيار dpإذا كنت تريد ذكر العرض والارتفاع لتنمو وتتقلص ديناميكيًا استنادًا إلى أحجام الشاشات.

  • إذا dp/dipأعطينا ، سيحسب نظام Android تلقائيًا حجم البكسل على أساس شاشة بحجم 160 بكسل.

SP(Scale independent pixels):

  • يتم تحجيمه بناءً على تفضيل حجم الخط للمستخدم. الخطوط يجب أن تستخدم sp.

  • عند ذكر أحجام الخطوط لتناسب أحجام الشاشات المختلفة ، استخدم sp. يشبه ذلك dp.استخدامًا spبشكل خاص لأحجام الخط لتتوسع وتتقلص ديناميكيًا استنادًا إلى أحجام الشاشات

وثائق Android تقول:

عند تحديد الأبعاد ، استخدم دائمًا إما dpأو spالوحدات. A dpهي بكسل مستقلة عن الكثافة تقابل الحجم الفعلي للبيكسل عند 160 dpi. A spهي نفس الوحدة الأساسية ، ولكن يتم قياسها حسب حجم النص المفضل للمستخدم (وهي وحدة بكسل مستقلة عن المقياس) ، لذلك يجب استخدام وحدة القياس هذه عند تحديد حجم النص


أرغب في توفير طريقة سهلة للفهم dp. في الواقع ، أعتقد dpأنه من الأسهل فهمه. dpهي مجرد وحدة الطول المادي. انها من نفس البعد mmأو inch. من الملائم لنا أن نكتب 50dp، 60dpبدلاً من 50/160 inchأو 60/160 inch، لأن المرء dpفقط هو 1/160 inchما هو حجم الشاشة أو الدقة.

المشكلة الوحيدة هي أن الروبوت نقطة في البوصة من بعض الشاشات ليست دقيقة. على سبيل المثال ، قد تحتوي شاشة مصنفة على 160 نقطة في البوصة على 170 نقطة في البوصة بالفعل. لذا فإن نتيجة الحساب dpغير واضحة. يجب أن يكون تقريبًا نفس الشيء 1/160 inch.


تتكون شاشة الهاتف المحمول من آلاف النقاط الصغيرة المعروفة بالبكسل (px) . البكسل هو أصغر عنصر يذهب إلى جعل الصورة. وكلما زاد عدد البيكسلات لعمل صورة أو صيغة ، كلما أصبحت أكثر وضوحا ، مما يجعل شاشة الهاتف الذكي أكثر سهولة في القراءة.

يتم قياس دقة الشاشة من حيث عدد البكسل على الشاشة. دقة الشاشة هي مواصفات شائعة الاستخدام عند شراء جهاز ، ولكنها في الواقع ليست مفيدة عند تصميم Android لأن التفكير في الشاشات من حيث وحدات البكسل يتجاهل مفهوم الحجم الفعلي ، وهو أمر مهم حقًا بالنسبة لجهاز اللمس.

تسمح البكسل المستقل الكثافة (dp أو dip) للمصمم بإنشاء أصول تظهر بطريقة متوقعة ، بغض النظر عن دقة أو كثافة الجهاز المستهدف.

يساوي البكسل المستقل الكثافة (dp أو dip) بكسل واحد عند كثافة خط الأساس أو 160 نقطة في البوصة (نقطة لكل بوصة).

1 بكسل / 1 نقطة = 160 نقطة في البوصة / 160 نقطة لكل بوصة

2 بكسل / 1 نقطة = 320 نقطة في البوصة (2 ×) / 160 نقطة لكل بوصة

أين،

نقطة في البوصة هي النقاط في البوصة

لذلك ، عند 320 نقطة في البوصة ، يساوي dp 1 2 بكسل.

معادلة

px / dp = dpi / 160dpi

Dots per inch (dpi) هو مقياس للحدة (أي كثافة النقاط المضيئة) على شاشة العرض. ستختلف النقاط لكل بوصة من أجل دقة صورة معينة بناءً على حجم الشاشة الكلي حيث يتم توزيع عدد البكسلات نفسه على مساحة مختلفة.

يساعدنا العمل مع وحدات البكسل المستقلة الكثافة على التعامل مع موقف مثل المكان الذي يوجد به جهازان بنفس درجة وضوح البكسل ، ولكن اختلاف مقدار المساحة. لنفترض أنه في حالة ما ، يكون لوحي وهاتف له نفس دقة البكسل 1280 × 800 بكسل (160 نقطة في البوصة) و 800 × 1280 بكسل (320 نقطة في البوصة) على التوالي.

الآن نظرًا لأن الجهاز اللوحي في كثافة خط الأساس (160 نقطة في البوصة) ، تكون أحجام البكسلات الفيزيائية المستقلة والكثافة متساوية ، 1280 × 800. أما الهاتف من ناحية أخرى فله كثافة بكسل أعلى ، بحيث يكون لديه نصف عدد البكسلات المستقلة الكثيرة ككثافة فيزيائية بكسل. لذلك ، يشتمل الهاتف على 400 بكسل بكسل مستقلاً بكثافة. لذا ، فإن استخدام بيكسلات مستقلة عن الكثافة يجعل من السهل على الصورة الذهنية أن يكون للقرص مساحة أكبر بكثير من الهاتف.

وبالمثل ، إذا كان لديك جهازان لهما حجم شاشة مشابه ، ولكن كثافة بكسل مختلفة ، فيقول أحدهما هو 800 × 1280 بكسل (320 نقطة في البوصة) ، والآخر هو 400 × 640 بكسل (160 نقطة في البوصة) ، ولا نحتاج إلى تعريف تخطيطات مختلفة لهاتين الجهازين ، حيث يمكننا قياس الأصول من حيث الكثافة وحدة البكسل المستقلة التي هي نفسها لكلا الجهازين.

800 × 1280 بكسل (320 نقطة في البوصة) = 400 بكسل بمقدار 640 بكسل مستقل (dp)

400 × 640 بكسل (160 نقطة في البوصة) = 400 بكسل بمقدار 640 بكسل مستقل (dp)

وحدات البكسل المستقلة المقياس (sp) هي الوحدة المفضلة لحجم الخط. لأغراض الوصول ، يتيح Android للمستخدمين تخصيص حجم خط جهازهم. يمكن للمستخدمين الذين يواجهون صعوبة في قراءة النص زيادة حجم خط جهازهم. يمكنك عادةً العثور على هذا الخيار في إعداد العرض على هاتفك أو جهازك اللوحي ضمن حجم الخط. غالبًا ما يتوفر أيضًا من خلال إعدادات إمكانية الوصول.

باستخدام وحدات البكسل المستقلة بالنطاق ، تكون 16 نقطة في الدقيقة هي نفسها 16 بكسل لكل بوصة عندما يكون حجم خط الجهاز عاديًا أو 100٪. ولكن عندما يكون حجم خط الجهاز كبيرًا ، على سبيل المثال 125٪ ، سيترجم 16 sp إلى 20 dp أو 1.25 مرة 16.

إذا كنت تستخدم dp كوحدة لحجم الخط ، فهذا الجزء من النص له حجم فعلي معين بغض النظر عما إذا كان المستخدم قد خصص حجم خط الجهاز. استخدام وحدات sp سيجعل تجربة أفضل للأشخاص الذين يعانون من ضعف البصر.

المرجع : Udacity ، جوجل


لقد صادفت مقالة جيدة حول تصميم واجهة مستخدم تطبيقات Android لشاشات مختلفة ، وأود أن أتركها هنا فقط لشخص يبحث في هذا المجال. نعم ، أعرف أنه تم وصفه بطريقة أو بأخرى في مستندات Google (والمشار إليه في المشاركات أعلاه) ، قرأت ذلك ولكنه لم يكن جيدًا بالنسبة لي (نعم ، قد أكون غبيًا جدًا)). بقي من غير الواضح بالنسبة لي كيفية تصميم تخطيطات قادرة على التعامل مع حجم الشاشة المختلفة. أنا أكره مفهوم DP وهلم جرا ، عندما أحتاج إلى تنفيذ تخطيط واجهة المستخدم "مرنة" لشاشات مختلفة. (يا مطوري iOS - نعم ، أنت على حق مفهوم Storyboard).

Android ليس مفهومًا سيئًا لواجهة المستخدم ، ولكنه يفتقر إلى ميزات Storyboard لنظام التشغيل iOS ، للأسف. تصميم واجهة مستخدم مرنة في Android ليس بالأمر السهل (في أفضل الأحوال).

في ما يلي المقالة التي ساعدتني على فهم ما يجب فعله في Android لإنشاء تصميمات لأحجام شاشات مختلفة:

JMSTUDIO Blog: - تقرر حجم شاشة تطبيق Android

كيفية تصميم واجهة المستخدم لتطبيقات Android لحجم الشاشة المختلفة

لتصميم واجهة مستخدم للتطبيق لأحجام مختلفة للشاشة ، يجب أن يفي تصميمنا المبدئي بحد أدنى من المساحة المطلوبة لكل حجم شاشة. يحدد Android الحد الأدنى للحجم (بالقيمة dp) لكل نوع شاشة معممة. في ما يلي إرشادات إرشادات حجم شاشة Android. عندما نحصل على حجم الشاشة في dp ، لا يكفي تصميم واجهة مستخدم تطبيق Android. لكل حجم شاشة ، نحن بحاجة إلى إعداد الرسومات والصور النقطية لكل كثافة. في ما يلي إرشادات لكثافة شاشة Android.

للحساب السهل ، يمكننا متابعة نسبة القياس 3: 4: 6: 8 بين الكثافات الأربعة المعممة. إذا قمنا بإنشاء صورة 36 ​​× 36 بيكسل لجهاز ldpi ، فسيكون حجم الصور ذات الكثافة المتبقية 48 × 48 للـ mdpi ، و 72 × 72 للـ hdpi ، و 96 × 96 لـ xhdpi.

كيفية تصميم واجهة مستخدم تطبيقات Android في Photoshop

يعاني العديد من المصممين من مشاكل في تصميم واجهة مستخدم لنظام التشغيل Android في Photoshop أو أدوات تصميم الرسوم البيانية القائمة على وحدات البكسل الأخرى نظرًا لوجود وحدة مستقلة عن الكثافة ، dp. لا يعرف المصمّمون كيفية تعيين dp إلى بكسل. لا تقدم Google أيضًا دليلًا واضحًا لتصميم واجهة المستخدم لنظام Android ، على الرغم من أنها تقدم صيغة أساسية لترجمة dp و pixel.

كما تعريف Android ، 1pd يساوي 1px تحت جهاز 160 نقطة في البوصة (mdpi). لذلك نريد تصميم تطبيق Android لجهاز xlarge Android بكثافة mdpi ، يمكننا تحديد حجم واجهة المستخدم بالبكسل عند 960 بكسل في العرض وارتفاع 720 بكسل ؛ اتبع قاعدة التعيين نفسها ، يمكننا الحصول على اتباع دليل تصميم شاشة حجم تطبيق Android حجم واجهة المستخدم:

إضافة : إذا كنت مهتمًا بـ UI "المرن" أيضًا ، فألق نظرة على هذه المكتبة: Android SDK الذي يوفر وحدة حجم جديدة - sdp (قابل للتطوير). حجم هذه الوحدة مع حجم الشاشة (وهذا مذكور أيضًا في إجابة هنا ، حول SDPالمكتبة)

ADDED2 أدركت Google أخيرًا فائدتها في مفهوم واجهة مستخدم iOS Store Store ، وأصبحت هنا ConstraintLayoutفي عالم Android: إنشاء واجهة مستخدم متجاوبة مع ConstraintLayout


يرجى قراءة الإجابة من ويكي المجتمع. فيما يلي بعض المعلومات التي يجب وضعها في الاعتبار بالإضافة إلى الإجابات المذكورة أعلاه.

sp = scale بكسل مستقل

dp = كثافة البكسلات المستقلة

نقطة في البوصة = كثافة بكسل

لقد ذهبت من خلال الإجابات المذكورة أعلاه ... لا العثور عليها بالضبط الصحيح. sp لحجم النص ، dp لحدود التخطيط - قياسي. ولكن sp لحجم النص سوف يكسر التخطيط إذا استخدم بلا مبالاة في معظم الأجهزة.

sp تأخذ نصوص الجهاز ، في حين تأخذ dp مقياس الكثافة للجهاز (لا يتغير أبدًا في الجهاز) يمكن أن يشغل النص 100sp 80٪ من الشاشة أو 100٪ من الشاشة حسب حجم الخط الذي تم ضبطه في الجهاز

يمكنك استخدام sp لحقول التخطيط أيضا ، فإنه سوف يعمل :) لا يوجد تطبيق قياسي يستخدم sp للنص الكامل

استخدم sp و dp لحجم النص مع مراعاة UX.

  • لا تستخدم sp للنص في شريط الأدوات (يمكن استخدام android dimens المتوفرة أو dp)
  • لا تستخدم sp للنص بأزرار محددة صغيرة ، نص صغير جدًا ، إلخ

يستخدم بعض الأشخاص FONT الضخمة في هواتفهم لمزيد من إمكانية القراءة ، مما يمنحهم إصدارًا صغيرًا من حجم القرص الصلب. ضع sp للنص عند الضرورة ، ولكن تأكد من أنه لن يؤدي إلى كسر التنسيق.

وبالمثل ، إذا كان لديك تطبيق واحد يدعم جميع الأبعاد ، فإن إضافة أصول xxxhdpi يزيد حجم التطبيق كثيرًا. ولكن الآن الهواتف xxxhdpi شائعة لذلك يجب علينا تضمين الأصول xxxhdpi على الأقل للرموز في شريط جانبي ، شريط الأدوات وشريط القاع. من الأفضل الانتقال إلى الصور المتجهة للحصول على صور موحدة وأفضل جودة لجميع أحجام الشاشات.





units-of-measurement