Probleme mit Skalierung und Dichte für Android

Aktualisieren: Es hat sich herausgestellt, dass das Asus Transformer TF700T (High-End) eine Pixeldichte von ungefähr 224 haben sollte. Die Werte von 159, die Android meldet, sind entweder fehlerhaft oder wurden irgendwie modifiziert (der LCD-Dichte-Schlüssel in / system / build.prop), die ich aus irgendeinem Grund nicht finden kann.

Ich habe zwei nahezu identische Tablets, auf denen ich entwickle, beide ASUS Transformer und beide 10.1 ".

Das übergeordnete Modell weist die folgenden Spezifikationen auf (wobei 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

und das untere Modell hat:

dm.Density = 1
dm.DensityDpi = Default
dm.WidthPixels = 1280
dm.HeightPixels = 752
dm.Xdpi = 160.1576
dm.Ydpi = 160

Das High-End-Modell weist eine Diskrepanz auf. Die Density / DensityDpi ist 1,5 / Hoch, was für die hohe Auflösung in einem 10,1 - Zoll - Bildschirm Sinn macht. Um einen Wert von 1,5 zu erhalten, wäre Xdpi / Ydpi = 240 (siehe Gleichung)http://developer.android.com/guide/practices/screens_support.html)

px = dp * (dpi / 160) 

woher

scale = (dpi / 160)

so

240/160 = 1.5 

Xdpi / Ydpi von 160 entspricht nicht einem Faktor mit einer Dichte von 1,5 (Skalierung), der 160/160 = 1 wäre, richtig?

Diese Diskrepanz zwischen den DPIs und dem Skalierungsfaktor führt zu Größenfehlern zwischen den beiden Tablets, da die von mir verwendeten Funktionen (Context.Resources.GetDimension) die Werte auf dem High-End-Tablet (oder auch) zu stark skalieren klein am unteren ende, je nachdem worauf ich die "normalen / guten" größen aufbaue).

Das heißt, ich hätte dieses Problem nicht, wenn die Dichte 1 oder der xdpi / Ydpi 240 auf dem ersten Tablet wäre. Diese Werte scheinen nicht so miteinander verbunden zu sein, wie sie sein sollten. Dies kann daran liegen, dass ASUS möglicherweise die LCD-Dichte auf 159 eingestellt hat, um eine höhere Auflösung zu erhalten (in /system/build.prop - Ich habe nach dem Schlüssel ro.sf.lcd_density (mit ROM Toolbox) gesucht, konnte dies jedoch nicht bestätigen finde es).

Hier sind einige Ausdrucke als Referenz aus dem Konstruktor der benutzerdefinierten Ansicht:

High-End-Tablet:

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

Low-End-Tablet:

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

Hier befindet sich die Layout-Deklaration der Ansicht

<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"/>

und die Dimensionen, auf die es verweist, sind definiert als

<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>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage