私は、ユーザーがそれをクリックする際に問題がないことを確実にするために最小の物理的な寸法を確保するために、カスタムビューのonMeasureメソッドにいくつかのコードを追加していました。実際、私は高さ8ミリメートルを確保したいと思っていたが、一部のデバイスでは正常に動作するようだが、Samsung Galaxy S IIでは動作しない。それは予想される8mmのために、画面上に描かれた5mm未満のものが得られます。これは小さく、適切にクリックすることはできません。確かであるためには、問題は、私はそれをテストするための小さなプログラムを作成したデバイスにあった、主な活動のコードは、次のいずれかです。applyDimensionメソッドが間違った値を返すのはなぜですか?
public class TrialMillimetersActivity extends Activity {
private static final float FINGER_WIDTH = 8.0f;
private static final int FINGER_WIDTH_UNITS = TypedValue.COMPLEX_UNIT_MM;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
TextView tv = new TextView(this);
tv.setText("DisplayMetrics:" +
"\n Screen resolution in pixels: " +
metrics.widthPixels + "x" + metrics.heightPixels +
"\n Screen density (dpi): " + metrics.densityDpi +
"\n Scale for text: " + metrics.scaledDensity);
final float minFingerWidth = TypedValue.applyDimension(
FINGER_WIDTH_UNITS, FINGER_WIDTH, metrics);
tv.append("\n\nThe platform returns for " + FINGER_WIDTH +
"mm the number of " + minFingerWidth + " pixels on this device.");
final float widthMm = FINGER_WIDTH * (metrics.widthPixels)/minFingerWidth;
final float heightMm = FINGER_WIDTH * (metrics.heightPixels)/minFingerWidth;
tv.append("\n\nThis means this screen has a resolution of " + widthMm + "x" +
heightMm + " in millimeters.");
setContentView(tv);
}
}
私も同様に、異なるデバイスで上記のコードを試してみましたが、正確ではないが、画面の大きさに非常に近い(定規によって測定される)。しかし、銀河系ではないS II。
誰かがこの問題を回避する方法を教えてもらえますか、コードに誤りがある場合は、何が問題なのか教えてください。
どうもありがとう