43

カレンダーを作成していますが、グリッドが必要です。問題は、境界線、つまりグリッドをシミュレートするために使用している各グリッド間のスペースが1dpであるということです。しかし、そのかなり厚い。境界線のある他のカレンダーアプリを見ていますが、非常に薄いです。形を使っdrawableて1dpにしたとしても、その厚みはあります。.5を使ってみましたが、うまくいかなかったようです。それは不可能ですか?

4

3 に答える 3

64

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は{1px、1px、1px、1px}に解決されます。これは、上記の式の1未満のものは、値が明示的に指定されていない限り、単一ピクセルに解決されるためです0dp(単一ピクセル幅よりも薄いものを描画することはできません)。

可能な限り細い幅を使用する場合は、pxのようなスケーリングされた単位ではなく、明示的に幅を定義するのがおそらく最善dpです。の値を設定すると、すべてのデバイスで1つのピクセルで描画され、期待したり同じことをしたりする1pxよりもはるかに読みやすくなります。0.5dp0.1dp

于 2014-02-13T05:45:49.787 に答える
8

はい。

0.1dpに設定しましたが、4"ME860DRIODの1dpよりも小さくなっています。

于 2013-01-23T15:43:47.847 に答える
3

簡単な答えは「はい」です。

問題の簡単な解決策(つまり、可能な限り細い線を実現する)は、thincknessを1ピクセルに設定します。

pxはデバイスに依存せず、利用可能な最小のメジャーであり、さらに別の形式に変換されないため、丸め誤差や予期しないレンダリングはありません...説明させてください。

Androidレイアウトxmlファイルまたはdimensionsxml値ファイルを使用すると、dpの10進値を入力できます。

ただし、多くのデバイスで、0.1dpから1dpまでのいくつかの値を試しました。デバイスによっては、期待どおりにレンダリングされない場合があります。

ピクセル密度の低いデバイスでは、同じようにコーディングされていても、線が一方の側でもう一方の側に比べて太くなることがあります...これは、dpからpxの値に変換されたものを切り捨てるときに導入される不正確さによるものです-(Debunwiredが言及しているように) )::

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

ピクセル(px)は最小単位であり、整数である必要があります。つまり、目的が単純に可能な限り最小の線/境界線を持つことである場合は、次のように設定してみませんか。

1ピクセル

これがお役に立てば幸いです。

于 2018-04-09T16:51:16.563 に答える