2012-07-22 15 views
31

Takvim yapıyorum ve bir tabloya ihtiyacım var. Sorun, bir ızgarayı simüle etmek için kullandığım şey olan kenarlıklar veya her ızgara arasındaki boşluk, 1 dp'dir. Ama oldukça kalın. Sınırları olan diğer takvim uygulamalarına bakıyorum ve çok zayıflar. drawable şeklini kullanıp 1dp yapsam bile, yine de o kalınlığa sahip. .5 kullanmayı denedim, ama işe yaramadı. Bu mümkün değil mi?Android, dp'nin 1dp'den daha azını destekleyebilir mi?

cevap

51

Android ben çünkü öneriyoruz emin değilim gerçi, XML dp için fraksiyonel değerleri girmesine izin vermez sonuçlar/işlem tahmin etmek daha kolay hale cihazlar (temel olarak), aşağıdaki formül kullanılarak pikseller halinde dp değerleri dönüştürmek.

px = (int)(scale * dp + 0.5) 

(yani en yakın tam piksel değerine yuvarlak cihaz yoğunluk ölçeği)

scale değeri cihazının ekran yoğunluğuna dayalı olacaktır:

  • MDPI = 1
  • HDPI = 1.5
  • xhdpi = 2
  • XXHDPI = 3

Böylece 0.5dp Yukarıdaki yoğunluklar için {1px, 1px, 1px, 2px} sonuçlanırken, 1dp {1px, 2px, 2px, 3px} olacaktır. Yukarıdaki formülde şey 1'den az tek bir piksele giderir çünkü değeri açıkça 0dp sürece 0.1dp gibi minik bir değer (tek piksel genişliği daha ince bir şey çizmek mümkün değildir {1px 1px 1px, 1px} olarak çözümlenebileceğini).

En ince olası genişliğin kullanıldığından emin olmak için, genişliği en iyi şekilde ile dp gibi ölçeklendirilmiş bir birim yerine tanımlamak için en iyi şekilde tanımlayın. 1px değerinin ayarlanması, tüm aygıtlarda tek bir pikselle çizilecek ve 0.5dp veya 0.1dp'un aynı şeyi umduğundan çok daha okunaklı olacaktır.

+0

px harika bir fikir - her cihazın olabildiğince iyi olmasına izin veriyor. Teşekkürler! –

7

Evet.

Ben 0.1dp ayarlı ve bu benim 4" ME860 DRIOD üzerinde 1dp daha küçüktür.

+0

Bu, cihaza bağlı gibi görünüyor. 0.5dp'lik bir kenarlık görüyorum ve Nexus 4'ümde ilk gen Kindle'da değil. – Sam

İlgili konular