子のレイアウト/ビューの幅と高さを、それらを含むViewGroupの寸法に基づいて計算しようとしています。
私はそれぞれの子供のマージン値を考慮に入れようとしていますが、これを完全に正しくすることはできないようです。
私は太陽の下ですべての変換(dip、sp、px、in、mm)を試しましたが、それでも同じ結論に達しました。つまり、マージン値は他のどの次元値よりもはるかに小さいピクセル値に変換されます(つまり、幅と高さ)。
この換算係数が必要です。私はそれを計算するために多くのことを試みましたが(Context.Resources.DisplayMetrics-Density、DensityDpi、ScaledDensity)、成功しませんでした。
この変換係数は、実行時に利用可能な値から取得または導出できるとは思わないので、誰かがそれが何であるか(またはどこでそれを見つけて計算するか)を知っているのではないかと考えていました。
コンテキストを示すために、子レイアウト(LinearLists)の5x7グリッドを含むカスタムカレンダーを実装しています。各子の周囲には余白があります。
最も外側のビューはRelativeLayoutで、幅と高さはそれぞれWとHで、マージン幅はMです。したがって、次のように考えることができます。
CELL_WIDTH = W/7 - M*7
CELL_HEIGHT = H/5 - M*5
ただし、マージン幅係数M*7およびM*5は非常に大きくなりすぎて、グリッド全体が親ビューよりも小さくなります(これは問題です。b/ c塗りつぶす必要があります)。
私はここや他の場所の投稿からたくさんの異なる変換テクニックを試しましたが、成功しませんでした。アンドロイドがマージン値を内部的に保存するために使用する変換係数があると確信しています(これはピクセル単位であると想定しています)。私が求めているのはこの変換係数です(もちろん、私がここで試みている計算を実行するためのより良い/正しい方法を誰かが知っている場合を除きます)。
これが私が試したリンクです。Javaソリューションの1つをC#に変換し、現在使用しています(この特定の問題は解決しませんでしたが、多くの光を当てるのに役立ちました。他の場所での支援):