Wenn Sie mobile Anwendungen speziell in Android entwickeln, dann bin ich mir ziemlich sicher, dass Sie Schwierigkeiten haben, den Inhalt Ihrer Anwendungen dynamisch zu gestalten, insbesondere die Textgröße. Ich arbeite schon ziemlich lange an Android-Anwendungen und habe keine offizielle Dokumentation über die Unterstützung unterschiedlicher Textgrößen je nach Gerätebildschirm gefunden. Es gibt jedoch einige offizielle Ressourcen, die die Verwendung von TextView mit der Unterstützung der Textgröße, wie sie in der sp
Unit definiert ist, beschreiben, z.B. android:textSize=“12sp“.
Es besteht kein Zweifel, dass jeder Entwickler diesen Ansatz verwendet hat, um die dynamische Textgröße zu erreichen, die das Gerät unterstützt, auf dem die Anwendung läuft.
Heute werde ich meine Erfahrung teilen, wie ich dynamische Textgröße in Android-Anwendungen erreicht habe, mit diesem Ansatz können Sie nicht nur die Textgröße, sondern auch die Größe anderer Ansichten anpassen.
Lassen Sie uns in unseren Ansatz der dynamischen TextView-Größe eintauchen💪🏼
Wenn Sie keine dimen.xml-Datei in Ihrem Projekt haben, dann erstellen Sie eine, indem Sie die folgenden Schritte befolgen:
- Klicken Sie mit der rechten Maustaste auf Ihren Werteordner
- Wählen Sie Neu
- Wählen Sie Werte-Ressourcendatei
- Erstellen Sie dann eine Datei dimen.xml
- Definieren Sie eine Dimensionsressource in dimen.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textSizeTitle">@dimen/_22sdp</dimen>
</resources>
Nach dem Hinzufügen der Dimen-Ressource wird ein Fehler auf @dimen/_22sdp
auftreten, machen Sie sich keine Sorgen, wir werden ihn in den nächsten Schritten beheben.
Erstellen der Datei meta.xml:
Diese Datei wird als Referenz für die verschiedenen Varianten oder Qualifier verwendet, die das Android-Gerät besitzt, auf dem die Anwendung läuft.
- Erstelle wieder eine neue Werte-Ressourcendatei
- Benenne sie als meta, aber drücke noch nicht ok im Dialog
- Klicke auf den Dichtequalifizierer aus der Liste auf der linken Seite
- Nun wähle die Schaltfläche, die ein größeres als Zeichen hat wie >>, dann sehen Sie etwas wie dies
- Wählen Sie Medium Density und drücken Sie ok
Android Studio unterstützt verschiedene Qualifier, einer davon ist Density, den wir gerade oben verwendet haben. Wiederholen Sie nun den Schritt, um die Datei meta.xml zu erstellen und fügen Sie alle folgenden Dichte-Qualifikatoren hinzu:
- Hohe Dichte
- X-Hohe Dichte
- XX-Hohe Dichte
- XXX-Hohe Dichte
Erstellen Sie nun eine weitere meta.xml-Datei und verwenden Sie dieses Mal den Größenqualifikator auf der linken Seite und wählen Sie die Option X-Large.
Nun erstellen wir eine weitere meta.xml-Datei mit einem anderen Qualifier, nämlich Smallest Screen Width
, wie unten gezeigt
Wenn Sie auf den Smallest Screen Width
klicken, sehen Sie die Option, die kleinste Breite in dp wie unten gezeigt zu definieren
Dann klicken Sie auf die Schaltfläche OK.
Wir erstellen weitere meta.xml-Datei mit den folgenden kleinsten Breiten:
- 300
- 330
- 360
- 390
- …
- …
- …
- … erstellen Sie Dateien mit der Differenz von 30, bis Sie 780 erreichen
Die Frage hier ist, was in diesen Dateien stehen würde, nun, wir werden in den nächsten Schritten String-Ressourcen in alle Metadateien hinzufügen.
Im linken Fenster von Android Studio haben Sie diese Dateien wie unten gezeigt:
Jede Datei zeigt ihren Qualifier auf der rechten Seite des meta.xml-Namen, öffnen Sie jede Datei und setzen Sie die folgende String-Ressource ein.
meta.xml (hdpi)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="dimension">values-hdpi</string>
</resources>
Öffnen Sie jede meta.xml-Datei und die oben erwähnte Ressource, aber Sie müssen die Werte-hdpi-Wert mit Werten-{hier verwenden Sie Qualifier der jeweiligen Datei} ändern. Außerdem können Sie diese Dateien auf github überprüfen.
- meta.xml(hdpi)
- meta.xml(mdpi)
- meta.xml(xhdpi)
- meta.xml(xxhdpi)
- meta.xml(xxxhdpi)
- meta.xml(xlarge)
- meta.xml(sw300dp)
- meta.xml(sw330dp)
- meta.xml(sw360dp)
- meta.xml(sw390dp)
- meta.xml(sw420dp)
- meta.xml(sw450dp)
- meta.xml(sw480dp)
- meta.xml(sw510dp)
- meta.xml(sw540dp)
- meta.xml(sw570dp)
- meta.xml(sw600dp)
- meta.xml(sw630dp)
- meta.xml(sw660dp)
- meta.xml(sw690dp)
- meta.xml(sw720dp)
- meta.xml(sw750dp)
- meta.xml(sw780dp)
Es ist noch nicht fertig, es gibt noch mehr Dateien, die wir brauchen, nämlich sdp.xml,
diese Datei mit allen Qualifizierern erstellen, die wir zuvor für meta.xml,
erstellt haben, sobald du mit dem Erstellen all dieser Dateien von sdp.xml
mit allen Qualifizierern fertig bist, kannst du den Inhalt dieser Dateien auf github finden. sdp
- sdp.xml(hdpi)
- sdp.xml(mdpi)
- sdp.xml(xhdpi)
- sdp.xml(xxhdpi)
- sdp.xml(xxxhdpi)
- sdp.xml(xlarge)
- sdp.xml(sw300dp)
- sdp.xml(sw330dp)
- sdp.xml(sw360dp)
- sdp.xml(sw390dp)
- sdp.xml(sw420dp)
- sdp.xml(sw450dp)
- sdp.xml(sw480dp)
- sdp.xml(sw510dp)
- sdp.xml(sw540dp)
- sdp.xml(sw570dp)
- sdp.xml(sw600dp)
- sdp.xml(sw630dp)
- sdp.xml(sw660dp)
- sdp.xml(sw690dp)
- sdp.xml(sw720dp)
- sdp.xml(sw750dp)
- sdp.xml(sw780dp)
Und das ist alles für die Einrichtung, jetzt müssen Sie nur noch diese Dimensionswerte verwenden, die Sie bereits in der Datei dimen.xml definiert haben, die wir am Anfang dieses Blogs besprochen haben.
Verwendung
Angenommen, Sie haben einen dimen-Wert wie folgt definiert:
<dimen name="textSizeTitle">@dimen/_22sdp</dimen>
Sie können ihn überall in Ihren Layout-xml-Dateien verwenden:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
<!-- // here is the dimen value that will support different screen size-->
android:textSize="@dimen/textSizeTitle"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Versuchen Sie, Ihre Anwendung in verschiedenen Emulatoren auszuführen, die unterschiedliche Bildschirmabmessungen und -dichte haben, Sie werden sehen, dass sich die Textgröße entsprechend dem Gerät anpasst, auf dem die Anwendung ausgeführt wird.
Und das gehört jetzt alles dir 🥳
Danke fürs Lesen und ich hoffe, dass deine Anwesenheit hier hilfreich war 😎
Du kannst auch meine andere Geschichte über Styling/Designing von TextField in Jectpack Compose UI – Android lesen
Kamran Ramzan ist ein Student der Softwaretechnik und arbeitet als Full Stack Mobile Application Developer. Er erforscht ständig neue Technologien und teilt sein Wissen mit euch in der Hoffnung, dass es euch irgendwie hilft.
Klatscht bitte immer wieder 😇 wenn euch meine Bemühungen gefallen 👏🏼