2012-05-02 7 views
1

私は、ユーザーがそれをクリックする際に問題がないことを確実にするために最小の物理的な寸法を確保するために、カスタムビューの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。

誰かがこの問題を回避する方法を教えてもらえますか、コードに誤りがある場合は、何が問題なのか教えてください。

どうもありがとう

答えて

0

私は、ここにCyanogenmod(キットカット)との株式ROMを持つ1と他の2つのSIIデバイス上のコードをテストしてみた、との両方がかなり正確である56x93.33mmの画面を報告。

カスタムビューで同じapplyDimension呼び出しを使用している場合、それは機能するはずです。

最後のテストとは違うことを試してみましょう。その寸法を使って簡単なビューを描き、コードで幅を設定します。おそらく、カスタムビューフローが最終ビューサイズを変更します。

関連する問題