Ich weiß, es wurde bereits 1000 Mal besprochen, aber ich kann die Textgröße nicht für verschiedene Bildschirmgrößen anpassen. Ich versuche, 'sp' als Größeneinheiten in meinem benutzerdefinierten Stil zu verwenden:
<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
...
<item name="android:textSize">30sp</item>
...
</style>
In 2.7 QVGA sieht es OK aus:
Aber in 7in WSVGA sieht es so aus:
Ich habe versucht, sowohl 'sp' als auch 'dp' mit dem gleichen Ergebnis zu verwenden.
Könnten Sie bitte erklären, wie diese Schaltflächen auf jedem Bildschirm gleich aussehen?
Der vollständige benutzerdefinierte Schaltflächenstil
<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/custom_button</item>
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_margin">3dp</item>
<item name="android:textColor">#ffffff</item>
<item name="android:gravity">center</item>
<item name="android:textSize">30sp</item>
<item name="android:textStyle">bold</item>
<item name="android:shadowColor">#000000</item>
<item name="android:shadowDx">1</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">2</item>
</style>
Und in meinem Bewerbungsthema habe ich
<item name="android:buttonStyle">@style/CustumButtonStyle</item>
Und da ist mein Layout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:background="@drawable/grid"
android:gravity="center"
android:orientation="vertical" android:layout_height="fill_parent">
<Button
android:id="@+id/buttonContinue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/continue_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
<Button
android:id="@+id/buttonNewGame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buttonContinue"
android:layout_alignRight="@+id/buttonContinue"
android:layout_below="@+id/buttonContinue"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/new_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
<Button
android:id="@+id/ButtonAbout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buttonNewGame"
android:layout_alignRight="@+id/buttonNewGame"
android:layout_below="@+id/buttonNewGame"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/about" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
android
screen-size
text-size
Forcelain
quelle
quelle
Antworten:
@forcelain Ich denke, Sie müssen dieses Google IO Pdf für Design überprüfen . In diesem PDF gehen Sie zu Seite Nr. 77, in der Sie finden, wie dort Vorschläge für die Verwendung von dimension.xml für verschiedene Android-Geräte gemacht werden. Beispiel siehe unten Struktur:
Zum Beispiel haben Sie unten dimensions.xml in Werten verwendet.
In einem anderen Werteordner müssen Sie die Werte für Ihre Textgröße ändern.
Hinweis: Wie von @espinchi angegeben, sind Small, Normal, Large und Xlarge seit Android 3.2 zugunsten der folgenden Elemente veraltet:
Deklarieren von Tablet-Layouts für Android 3.2
quelle
Ich denke, es ist zu spät, um auf diesen Thread zu antworten. Ich möchte jedoch meine Idee oder meinen Weg zur Lösung des Problems der Textgröße über Geräte mit unterschiedlicher Auflösung mitteilen. Viele Android-Entwicklerseiten schlagen vor, dass wir sp unit für die Textgröße verwenden müssen, die die Textgröße für Geräte mit unterschiedlicher Auflösung handhabt. Aber ich kann immer nicht das gewünschte Ergebnis erzielen. Ich habe also eine Lösung gefunden, die ich aus meinen letzten 4-5 Projekten verwende und die gut funktioniert. Gemäß meinem Vorschlag müssen Sie die Textgröße für jedes Auflösungsgerät angeben, was etwas mühsam ist, aber Ihre Anforderungen erfüllt. Jeder Entwickler muss über das Verhältnis 4: 6: 8: 12 (h: xh: xxh: xxxh) hören . Jetzt müssen Sie in Ihrem Projekt- Res- Ordner 4 Ordner mit der Dimens-Datei erstellen, z
Jetzt müssen Sie in der Datei dimensions.xml Textgrößen platzieren. Ich zeige Ihnen Code für Werte-HDPI , ähnlich müssen Sie Code für andere Auflösungswerte / Dimens.xml-Datei platzieren.
Für andere Auflösungen ist es wie xhdpi : 6px, xxhdpi : 8px, xxxhdpi : 12px. Dies wird mit dem Verhältnis (3: 4: 6: 8: 12) berechnet, das ich oben geschrieben habe. Lassen Sie uns ein anderes Beispiel für die Textgröße mit dem obigen Verhältnis diskutieren. Wenn Sie eine Textgröße von 12px in HDPI verwenden möchten, ist dies in einer anderen Auflösung der Fall
Dies ist die einfache Lösung, um die erforderliche Textgröße für alle Auflösungen zu implementieren. Ich denke hier nicht an Geräte mit einer Auflösung von mdpi . Wenn jemand die Textgröße für diese Auflösung angeben möchte, entspricht das Verhältnis 3: 4: 6: 8: 12 . Bei Fragen lassen Sie es mich bitte wissen. Hoffe, es wird euch Leuten helfen.
quelle
Manchmal ist es besser, nur drei Optionen zu haben
Verwenden Sie klein und groß, um von der normalen Bildschirmgröße zu unterscheiden.
Für normal müssen Sie nichts angeben.
Auf diese Weise können Sie vermeiden, Abmessungen für verschiedene Bildschirmgrößen zu testen und anzugeben.
quelle
Ich habe das gleiche nach Dimension gemacht und so etwas gemalt (mit dp aber nur für Text und in drawText ())
XML:
Code:
quelle
dp
für die Textgröße verwenden ... verwenden Siesp
stattdessen.Jeder kann die unten erwähnte Android-Bibliothek verwenden, die die einfachste Möglichkeit ist, Textgrößen mit fast allen Gerätebildschirmen kompatibel zu machen. Es wurde tatsächlich auf der Grundlage neuer Android-Konfigurationsqualifikatoren für die Bildschirmgröße (eingeführt in Android 3.2) SmallestWidth swdp entwickelt.
https://github.com/intuit/sdp
quelle
Wenn Sie über API 26 verfügen, können Sie autoSizeTextType verwenden :
Mit der Standardeinstellung kann die automatische Größenanpassung von TextView auf horizontalen und vertikalen Achsen gleichmäßig skaliert werden.
https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview
quelle
Ich denke, Sie können dies archivieren, indem Sie für jede Bildschirmgröße mehrere Layoutressourcen hinzufügen. Beispiel:
Referenz: 1. http://developer.android.com/guide/practices/screens_support.html
quelle
So vereinheitlichen Sie alle Bildschirme, um die gleichen Elementgrößen einschließlich der Schriftgröße anzuzeigen: - Entwerfen Sie die Benutzeroberfläche auf einer Bildschirmgröße mit den Größen, die Sie während des Entwurfs für angemessen halten, dh die TextView-Schriftgröße beträgt 14 dp bei der Standardbildschirmgröße mit 4'6 Zoll.
Berechnen Sie programmgesteuert die physische Bildschirmgröße der anderen Telefone, dh 5'2 Zoll anderer Telefone / Bildschirme.
Verwenden Sie eine Formel, um die prozentuale Differenz zwischen den beiden Bildschirmen zu berechnen. dh was ist der prozentuale Unterschied zwischen 4'6 und 5'2.
Berechnen Sie die Pixeldifferenz zwischen den beiden Textansichten basierend auf der obigen Formel.
Ermitteln Sie die tatsächliche Größe (in Pixel) der TextView-Schriftgröße und wenden Sie die zuvor berechnete Pixeldifferenz auf die Standardschriftgröße an.
Auf diese Weise können Sie das dynamische Seitenverhältnis auf alle Bildschirmgrößen anwenden und das Ergebnis ist großartig. Sie haben auf jedem Bildschirm das gleiche Layout und die gleichen Größen.
Es kann zunächst etwas knifflig sein, erreicht aber das Ziel vollständig, sobald Sie die Formel herausgefunden haben. Mit dieser Methode müssen Sie nicht mehrere Layouts erstellen, um unterschiedliche Bildschirmgrößen anzupassen.
quelle
Sie können auch
weightSum
undlayout_weight
property verwenden, um Ihren unterschiedlichen Bildschirm anzupassen.Dafür müssen Sie
android:layout_width
= 0dp undandroid:layout_width
= (was auch immer Sie wollen) machen;quelle
Wie @espinchi ab 3.2 (API Level 13) erwähnt, sind Größengruppen veraltet. Bildschirmgrößenbereiche sind der bevorzugte Ansatz für die Zukunft.
quelle
Codieren Sie die Größen nicht fest.
Für Flexibilität und neue Bildschirmauflösungen empfiehlt es sich, Dummy-TextView in das Layout einzufügen, um die Textgröße zu erhalten:
Und in Ihrem Code zum Beispiel:
Behalten Sie
textSize
als Referenz bei, zu der Sie eine konstante Größe oder eine Percetage-Größe hinzufügen können (durch Berechnung).quelle