更新:一些研究表明,华硕 Transformer TF700T(高端)的像素密度应该约为 224,因此 159 android 报告的值要么是错误的,要么已被某种方式修改(/ system/build.prop),由于某种原因我找不到。
我正在开发两台几乎相同的平板电脑,都是华硕 Transformer 和 10.1"。
高端模型具有以下规格(其中 dm = ApplicationContext.Resources.DisplayMetrics):
dm.Density = 1.5
dm.DensityDpi = High
dm.WidthPixels = 1920
dm.HeightPixels = 1128
dm.Xdpi = 159.8951
dm.Ydpi = 159.5811
低端型号有:
dm.Density = 1
dm.DensityDpi = Default
dm.WidthPixels = 1280
dm.HeightPixels = 752
dm.Xdpi = 160.1576
dm.Ydpi = 160
高端型号有差异。Density/DensityDpi 为 1.5/High,这对于 10.1" 屏幕内的高分辨率而言是有意义的。但要获得 1.5 的值,Xdpi/Ydpi = 240 不会,这样(有关公式,请参阅http ://developer.android.com/guide/practices/screens_support.html )
px = dp * (dpi / 160)
在哪里
scale = (dpi / 160)
所以
240/160 = 1.5
160 的 Xdpi/Ydpi 不对应于 1.5 密度(缩放)因子,即 160/160 = 1,对吗?
DPI 和缩放因子之间的这种差异导致我在两个平板电脑之间出现一些尺寸不匹配,b/c 我正在使用的函数 (Context.Resources.GetDimension) 在高端平板电脑上将值放大太多(或者太低端较小,取决于我将“正常/良好”尺寸建立在哪个基础上)。
也就是说,如果第一台平板电脑上的密度为 1,或者 xdpi/Ydpi 为 240,我就不会遇到这个问题。这些值似乎没有联系,因为它们应该是。这可能是因为华硕可能已将 LCD-Density 设置为 159,以获得更高的分辨率(在 /system/build.prop - 我寻找 ro.sf.lcd_density 键(使用 ROM 工具箱)以确认但无法找到它)。
以下是自定义视图的构造函数中的一些打印输出供参考:
高端平板电脑:
Context.Resources.GetDimension(control_panel_height_id) = 75
Context.Resources.GetDimension(grid_cell_boarder_width_id) = 1.5
Context.Resources.GetDimension(list_title_height_id) = 40.5
Context.Resources.GetDimension(list_title_text_size_id) = 21
Context.Resources.GetDimension(list_item_text_size_1_id) = 18
Context.Resources.GetDimension(list_item_text_size_2_id) = 15
Context.Resources.GetDimension(month_label_text_size_id) = 33
低端平板电脑:
Context.Resources.GetDimension(control_panel_height_id) = 50
Context.Resources.GetDimension(grid_cell_boarder_width_id) = 1
Context.Resources.GetDimension(list_title_height_id) = 27
Context.Resources.GetDimension(list_title_text_size_id) = 14
Context.Resources.GetDimension(list_item_text_size_1_id) = 12
Context.Resources.GetDimension(list_item_text_size_2_id) = 10
Context.Resources.GetDimension(month_label_text_size_id) = 22
视图的布局声明在哪里
<AppName.Droid.Views.Custom.CustomView
xmlns:calendar="http://schemas.android.com/apk/res/namespace"
android:id="@+id/CustomView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#1100FF00"
calendar:control_panel_height="@dimen/control_panel_height"
calendar:grid_cell_boarder_width="@dimen/grid_cell_boarder_width"
calendar:list_title_height="@dimen/list_title_height"
calendar:list_title_text_size="@dimen/list_title_text_size"
calendar:list_item_text_size_1="@dimen/list_item_text_size_1"
calendar:list_item_text_size_2="@dimen/list_item_text_size_2"
calendar:month_label_text_size="@dimen/month_label_text_size"/>
它引用的维度定义为
<resources>
<dimen name="control_panel_height">50dip</dimen>
<dimen name="grid_cell_boarder_width">1dip</dimen>
<dimen name="list_title_height">27dip</dimen>
<dimen name="list_title_text_size">14dip</dimen>
<dimen name="list_item_text_size_1">12dip</dimen>
<dimen name="list_item_text_size_2">10dip</dimen>
<dimen name="month_label_text_size">22dip</dimen>
</resources>