2012-07-22 1 views
31

私はカレンダーを作成しており、グリッドが必要です。問題は境界線です。むしろ、グリッドをシミュレートするために使用している各グリッド間のスペースは1 dpです。しかし、かなり厚いです。私は国境を持っている他のカレンダーアプリを見ていて、非常に薄いです。 drawableの形を使って1dpにしても、その厚さはそのままです。私は.5を使ってみましたが、うまくいきませんでした。それは不可能ですか?Androidでdpを1dp未満でサポートできますか?

答えて

51

私はので、それをお勧めしますかわからないけれどもAndroidのは、あなたがXMLにdpための小数値を入力することはできません結果は/計算を予測することはあまり容易になるデバイスは、(基本的に)使用してピクセルにdp値を変換し、次の式:

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

(すなわち、最も近い整数ピクセル値に丸めデバイス密度スケール)

scale値は、デバイスの画面密度に基づくことになる。

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

だから0.5dp上記の密度に対して{1px、1px、1px、2px}となり、一方、1dpは{1px、2px、2px、3px}となります。 0.1dpのような小さな値は、値が明示的に0dpでない限り、上記の式で1未満の値が1つのピクセルに解決されるため、{1px、1px、1px、1px}に解決されます(1ピクセルの幅より薄いものを描画することはできません) )。

可能な限り薄い幅を使用したい場合は、dpのような縮尺単位ではなく、pxで明示的に幅を明示的に定義することをお勧めします。 1pxの値を設定すると、すべてのデバイスで1つのピクセルで描画され、0.5dpまたは0.1dpが同じことをするよりも読みやすくなります。

+0

pxは素晴らしいアイデアです。各デバイスが可能な限り細かくできるようにします。ありがとう! –

7

はい。

私は0.1dpに設定し、それは私の4" ME860のDRIOD上1DPよりも小さくなっている。

+0

これはデバイスによって異なるようです。 0.5dpのボーダーが表示され、Nexus 4では表示されますが、第1世代Kindleでは表示されません。 – Sam

関連する問題