View für schlechte Auflösung

M

Manuel1805

Ambitioniertes Mitglied
2
Hallo!
in meiner App, habe ich verschiedene Views erstellt,z.B. layout, layout-sw600dp (Tablet 7Zoll), layout-sw720dp (Tablet 10 Zoll). Leider wird die Schriftgröße für das Handy Samsung J1 zu groß dargestellt (und muss über die Einstellungen Display>Schriftgröße> sehr klein umgestellt werden) , während meine anderen Handys z.B. Motorola Rarz i (Schriftgröße normal) oder Samsung S4 Mini die App optimal darstellen. Kann mir jemand sagen, wie der Layout-Ordner für nicht so hochaufösende (unter 220 ppi) Bildschirme heißen / lauten muss?
  • Motorola RAZR i hat eine Auflösung von 10,8 cm (4,3-Zoll-Super-AMOLED), 960×540 px (qHD), 258 ppi
  • Samsung J1 hat eine Auflösung von 4.3 inches (~59.8% screen-to-body ratio) 480 x 800 pixels (~217 ppi pixel density)
Wenn ich google richtig verstehe führen die Ordner layout-hdpi, layout-mdpi, etc. nicht zum Erfolg, da hdpi die beiden Handys abdeckt. Supporting Multiple Screens | Android Developers
 
Du hast schon das richtige Dokument gefunden. Dort ist eigentlich erklärt, wie man vorgehen muss.

Du darfst Dich nicht stringent an den realen technischen Werten halten. Um den ganzen foobar mit den verschieden Auflösungen in Grenzen zu halten, hat Google Standartgrößen definiert. Wenn das Display nicht genau den Standartgrößen entspricht, werden die Grafiken automatisch auf die passende Größe skaliert. D.h. für beide Geräte in Dienen Beispiel reicht hpi. Das funktioniert aber nur, wenn Du die Angaben im XML in dp angibst.
Units and measurements - Layout - Google design guidelines
 
Das ist ja leider das Problem.:drool: Ich möchte die 4 Zoll-Displays mit einer geringeren dpi-Anzahl (<230) anders behandeln (andere Schriftgröße) als die 4-Zoll-Displays mit einer höheren dpi-Anzahl. Daher meine Frage, ob ich die Displays mit einer geringen dpi-Anzahl ein anderes Layout bzw. Views zuordnen kann.
Ansonsten muss ich einen Button zur manuellen Schriftgröße einführen... Hoffe Du hast vielleicht noch einen Tipp für mich...
 
Also ich habe in meinen Spielen die Schriftgröße an die View und den Screen insgesamt angepasst. Und zwar in Prozent. Zum beispiel 2% von View Breite oder Höhe (je nachdem da stelle ich noch Berechnungen an was optimaler ist)

Verstehe bis Heute nicht warum Android nicht von Hause aus Größenangaben in Prozent bereitstellt und stattdessen diesen ganzen sp/dp Kram macht!

Wie schön einfach wäre es doch Layouts zu gestalten wo eine View sagen wir mal 10% der Breite und 20% der Höhe, an der und der Stelle im Parent einnimmt. Nein muss man alles selbst per Hand im Code machen. :glare:
 
  • Danke
Reaktionen: Manuel1805
Jaiel schrieb:
Also ich habe in meinen Spielen die Schriftgröße an die View und den Screen insgesamt angepasst. Und zwar in Prozent. Zum beispiel 2% von View Breite oder Höhe (je nachdem da stelle ich noch Berechnungen an was optimaler ist)

Verstehe bis Heute nicht warum Android nicht von Hause aus Größenangaben in Prozent bereitstellt und stattdessen diesen ganzen sp/dp Kram macht!

Wie schön einfach wäre es doch Layouts zu gestalten wo eine View sagen wir mal 10% der Breite und 20% der Höhe, an der und der Stelle im Parent einnimmt. Nein muss man alles selbst per Hand im Code machen. :glare:
Finde ich auch schade das das nicht so einfach geht.
Mit weightSum und layout_weight kann man zumindest ähnliches machen. Wenn du dem Parent Layout von 3 Views, z.B. weightSum="3" zuordnest und jedem der child Layouts, layout_weight="1" hat jedes der Child Layouts eine Breite von 33% des Parent Layouts. Das lässt sich dann beliebig kombinieren, z.b. weightSum="4" mit 2 Childs, die dann ein layout_weight von 3 und 1 haben. Dann ist die eine View 75% des Parents breit und die andere 25%. Zu beachten ist dann allerdings das width auf 0dp stehen muss.
Geht aber soviel ich weiß nur für die Breite von Views und nicht für die höhe oder die Schriftgröße.

EDIT: Das ganze funktioniert soweit ich weiß auch nur mit LinearLayouts. Es könnte sein das es auch mit der Höhe Funktioniert wen man das LinearLayout auf vertikal hat. Hab ich aber nicht getestet.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Manuel1805
Selber die Screens zu skalieren ist auch nicht der letzte Schluss. Es macht die App langsamer, und sieht nicht wirklich gut aus (teilweise bilden sich Treppen).

Am einfachsten ist immer noch, an den Vorgaben von Google zu halten. Wenn sich ein Hersteller nicht an die Spezifikationen von Google hält, kann man leider nichts machen. Außer man hat Lust eine Unmenge Smartphones vorrätig zu halten, und die Optik für jedes Device anzupassen.
 
@Jail, danke für Deinen Tipp.
...D.h. ich müsste einen Referenzbildschirm z.B. 250 dpi verwenden und hier einen Multiplikator anwenden.
(einen einfachen Dreisatz :winki: )
Code:
private float mulitplikator;
mulitplikator= getResources().getDisplayMetrics().density
tv.setTextSize(15 * multiplikator / 250);

@markus.tullius, leider verstehte ich Deinen Ansatz noch nicht, oder ich habe mein Problem falsch beschrieben.
Problemstellung: 4 Zoll-Displays mit hoher Auflösung zeigen meinen Text komplett an, 4-Zoll-Displays mit geringer Auflösung schneiden den Text ab.
Lösung Schriftgröße bei geringer Auflösung verkleinern... Entweder mit einer entsprechenden View - das hat leider nicht geklappt. Oder wie Jaiel sagte skalieren.
 
Der Ansatz ist ganz einfach. Android skaliert im Hintergrund selbständig die ganzen xmls (Deshalb soll man relative Werte nehmen). Wenn Du das nochmals macht, hast Du gute Chancen, dass ganze zu Verschlimmern. Zusätzlich wird der MainThread ausgebremst, weil er alles doppelt machen muss. Die ganze App fühlt sich langsamer an, insbesondere auf Devices mit schwacher CPU.

Daneben brichst du mit einem der zentralen Prinzipien von Android (und der OOP). Das Aussehen der GUI gehört ins XML. Wenn Du das so machst, wie @Jail vorschlägt, muss Du die Grafik an zwei Stellen pflegen. Dies kann sich gerade bei größeren, unkommentierten Projekten zu einem mittleren Alptraum entwickeln.

Google hat wegen den Problemen mit den verschieden Auflösungen extra ein Design-Leitfaden entwickelt.
Design | Android Developers
Bottom navigation - Components - Google design guidelines

Wenn etwas nicht in eine Zeile passt, kann man auch zwei Zeilen benutzen (Zeilenumbruch).
Spätestens wenn die Leute in den Einstellungen die Schriftgrößen verändern, hast Du Probleme.
 
Ich habe ja erwähnt dass ich das bei Spielen so mache. Menüs und alles andere sind bei mir einfach Bitmaps und wenn ich eine SurfaceView benutze dann mische ich da keine anderen Viewelemente mit rein, das macht es wirklich langsamer dann. Views verbrauchen zu viel Speicher und Rechenleistung udn eine SurfaceView arbeitet ncoh mal etwas anders als normale Views.

Ich würde es trotzdem begrüßen wenn man mit Prozentangaben arbeiten könnte bei normalen Views.
 
Kann Dich verstehen. Würde ich mir auch wünschen. Und das unterschieden Hersteller nicht immer ihre Geräte mit eigenen Müll verschandeln würden.
 

Ähnliche Themen

5
Antworten
0
Aufrufe
1.142
586920
5
M
Antworten
4
Aufrufe
1.169
swa00
swa00
B
Antworten
4
Aufrufe
472
bb321
B
Zurück
Oben Unten