Zwei Bildschirme, gleiche Größe mit unterschiedlicher Dichte

Zwei Bildschirme, abgesehen von der Dichte, fast gleiche Größe:

Linker Bildschirm ist ein Emulator 768×1280 160dpi (MDPI). Rechter Bildschirm ist ein Emulator 720×1280 320dpi (XHDPI).

  • Wie man eine Verbindung zu einem PostgreSQL Server über JDBC in Android herstellt?
  • Ändern Sie das Spinner-Dropdown-Symbol
  • So validieren Sie den Ursprung eines Web Service Invokation
  • Android XML Prozent Symbol
  • Realitäten der Verwendung von QT C ++, um eine Cross-Plattform-Telefon-App zu schreiben
  • Captured Photo Orientierung ändert sich in Android
  • Bildbeschreibung hier eingeben

    Ich benutze Breite 300dp und Höhe 300dp. XML:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/picture" android:layout_width="300dp" android:layout_height="300dp" android:src="@drawable/picture" android:layout_centerInParent="true"/> </RelativeLayout> 

    Unabhängig von der Cripsness / Bildqualität, sollten nicht beide Bilder den gleichen Platz in beiden (und anderen) Bildschirmen füllen? Es gibt eine Antwort, die diese Aussage hier bestätigt

    EDIT: Ich habe gesehen, dass Benutzer sagen, dass Sie das gleiche XML für verschiedene Bildschirme duplizieren müssen, damit Sie die DP-Werte von Elementen ändern können. Wenn das stimmt, denke ich, dass ich den DP-Einheitszweck falsch verstanden habe. Ich dachte, es war gedacht, das Bild mit der gleichen Größe über verschiedene Bildschirme mit den gleichen DP-Werten zu haben. Kannst du es bitte klären?

  • Android Studio-Gradle-Fehler mit Top-Level-Ausnahme
  • Fragment.newInstance () vc onSaveInstanceState ()
  • Android M FingerprintManager.isHardwareDetected () gibt false auf einem Samsung Galaxy S5 zurück
  • Gibt es eine Möglichkeit, Audio durch die Lautsprecher zu erzwingen, wenn Kopfhörer angeschlossen sind?
  • So überprüfen Sie, ob Standort auf und in hoher Priorität auf API 18 und unten ist
  • Was ist android.R.layout.simple_list_item_1?
  • 3 Solutions collect form web for “Zwei Bildschirme, gleiche Größe mit unterschiedlicher Dichte”

    Ich denke, die Tatsache, dass Emulatoren verwendet werden, verursacht ein bisschen Verwirrung hier.

    Die Angabe von dp-Einheiten, wie Sie hier getan haben, sollte bedeuten, dass das Bild ungefähr die gleiche physikalische Größe auf verschiedenen Geräten ist. In deiner Frage hast du gesagt, dass wir zwei Bildschirme von fast der gleichen Größe vergleichen, aber das ist nicht der Fall!

    Angesichts der Beschlüsse, die Sie in der Frage angegeben haben, betrachten wir (ungefähr) eine 9-Zoll-Tablette auf der linken Seite und ein 4,5-Zoll-Telefon auf der rechten Seite. Da es sich um virtuelle Geräte handelt und auf dem Bildschirm verkleinert werden können, können sie die gleiche Größe erscheinen lassen, aber sie stellen in der Realität sehr unterschiedliche Dinge dar.

    Auf der linken Seite sehen wir aus der Statusleiste und den Systemtasten, dass dies in der Tat wie eine Tablette aussieht, und ich habe die Symbole in der Statusleiste als grobe Maßstab verwendet:

    Bildbeschreibung hier eingeben

    Dies sichert die Erwartung, dass, wenn Sie tatsächlich eine Tablette und Telefon vor Ihnen (oder wenn die Emulatoren waren in korrekte Verhältnis), das Bild wäre die gleiche physische Größe auf beiden.

    Bearbeiten – zusätzliches Detail als Antwort auf die Kommentare zu dieser Antwort:

    Der Zweck der Beschreibung von Größen in dp ist, dass sie die gleiche physikalische Größe auf Geräten mit unterschiedlichen Pixeldichten sind. Dies ist, was du oben getan hast. Wenn das Element zum Beispiel 2 Zoll auf jeder Seite ist, dann wird es 2 Zoll auf einem High-res oder Low-Res-Telefon, und es wird 2 Zoll auf einem High-res oder Low-res Tablette sein.

    Wenn das, was Sie wollen, nicht für das Element die gleiche tatsächliche Größe ist, sondern immer der gleiche Anteil des Bildschirms (wie immer 90% die Breite des Bildschirms sagen) dann gibt es ein paar Arten von Layout, das Sie aus wählen können .

    LinearLayout nutzt das Konzept des Gewichts, um verschiedene Proportionen des Raumes zuzuordnen.

    Die Support-Bibliothek enthält PercentRelativeLayout und PercentFrameLayout die wie die regulären Layouts funktionieren, aber Ihnen erlauben, Größen mit Prozentsätzen anzugeben.

    Das neue ConstraintLayout ist derzeit nur in Android Studio 2.2 Preview Edition verfügbar. Ich habe es selbst noch nicht benutzt, aber es scheint, als ob es sich um einen eigenen Anteil und prozentuale Konzepte handelt, die dies auch ermöglichen würden.

    Sie können dies auch bei der Programmierung tun, also können Sie für verschiedene Bildschirmgrößen (auch für unterschiedliche Dichten) die Bildgröße in Prozent festlegen, indem Sie die Bildschirmdimensionen erhalten und dann die Anzahl der Pixel (in Prozent) für die Breite und die Anzahl der Pixel berechnen Höhe wie diese.

     protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout_xml); DisplayMetrics metrics = getResources().getDisplayMetrics(); int screenWidthInPixels = metrics.widthPixels; int screenHeightInPixels = metrics.heightPixels; int imageWidth = Math.round (screenWidthInPixels * (58.57/100)); //58.57 is the percentage value for image width int imageHeight = Math.round (screenHeightInPixels * (58.57/100)); //58.57 is the percentage value for image height ImageView picture= (ImageView)findViewById(R.id.your_image_id); picture.setLayoutParams(new RelativeLayout.LayoutParams((int) imageWidth , (int) imageHeight )); } 

    Einfache Klärung:

    Erster Bildschirm mit 160 [MDPI]:

    Hier 1 dp [von dir in xml's ImageView Breite verwendet] = 1 Pixel [px]. Wie es Spezifikation von Android ist. So wird das Bild in kompletten 300 Pixeln in Breite und Höhe angezeigt.

    Zweiter Bildschirm mit 320 [XHDPI]:

    Hier 1 dp [von dir in xml's ImageView Breite verwendet] = 2 Pixel [px].

    Und wie Sie "300dp" in Breite und Höhe verwendet haben, bedeutet, dass Sie Android bitten, "Dichte Pixel" [dp] anstatt physikalischen Pixel [px] zu verwenden.

    So, 300 dp = 600 Pixel [px]

    Deshalb ist ImageView doppelte Größe im 2. Emulator.

    Hoffe, es klärt Zweifel.

    Lösung:

    Wenn du deine ImageView von gleicher Breite und Höhe haben möchtest, dann kannst du android: weight attribute sowohl in android: width and android: height. Welches gleiche Raum auf beiden Seiten Ihrer Bildansicht zuteilen wird.

    Beispielcode für die Suche nach Dichte zur Laufzeit:

     private static String getDensityName(Context context){ float density = getResources().getDisplayMetrics().density; if(density >= 4.0){ return “xxxhdpi”; } if(density >= 3.0){ return “xxhdpi”; } if(density >= 2.0){ return “xhdpi”; } if(density >= 1.5){ return “hdpi”; } if(density >= 1){ return “mdpi”; } return “ldpi”; } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.