2012-05-02 45 views
1

我在自定义视图的onMeasure方法中添加了一些代码,以确保最小的物理尺寸,以确保用户不会有问题点击它。事实是,我想确保8毫米的高度,但同时在某些设备上似乎可以正常工作,但在三星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); 
    } 
} 

我试图上面的代码在不同设备中,并且即使作为没有确切的,非常接近屏幕尺寸(由尺子测量)。但不是在Galaxy S II中。

有人能告诉我如何解决这个问题,或者在代码错误的情况下告诉我什么是问题?

非常感谢

回答

0

我测试过两个SII设备在这里,一个与股票ROM和其他与的CyanogenMod(奇巧)你的代码,这两个报告56x93.33mm的屏幕,这是相当准确。

如果您在自定义视图中使用相同的applyDimension调用,它应该可以工作。

您可以尝试一些不同的最终测试,使用该维度绘制简单视图并通过代码设置其宽度。也许自定义视图流程会修改最终的视图大小。