Textgröße und verschiedene Android-Bildschirmgrößen

121

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:

2.7QVGA 30sp

Aber in 7in WSVGA sieht es so aus:

7in WSVGA 30sp

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

Forcelain
quelle
Auf Ihren Bildschirmen sehen sie gleich aus. Stellen Sie sicher, dass Ihre Zuschauerskala 100% ist
Dmitry Zaytsev
Sie können Antwort von hier finden stackoverflow.com/questions/16706076/…
Bhavesh Jethani

Antworten:

160

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

res/values/dimens.xml

res/values-small/dimens.xml

res/values-normal/dimens.xml

res/values-large/dimens.xml

res/values-xlarge/dimens.xml

Zum Beispiel haben Sie unten dimensions.xml in Werten verwendet.

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">18sp</dimen>
</resources>

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

Für die erste Generation von Tablets mit Android 3.0 bestand die richtige Möglichkeit, Tablet-Layouts zu deklarieren, darin, sie in einem Verzeichnis mit dem Qualifikationsmerkmal xlarge configuration (z. B. res / layout-xlarge /) abzulegen. Um andere Arten von Tablets und Bildschirmgrößen zu berücksichtigen, insbesondere 7-Zoll-Tablets, bietet Android 3.2 eine neue Möglichkeit, Ressourcen für diskretere Bildschirmgrößen anzugeben. Die neue Technik basiert auf dem Platzbedarf, den Ihr Layout benötigt (z 600 dp Breite), anstatt zu versuchen, Ihr Layout an die allgemeinen Größengruppen anzupassen (z. B. groß oder groß).

Der Grund für das Entwerfen von 7-Zoll-Tablets bei Verwendung der allgemeinen Größengruppen ist, dass sich ein 7-Zoll-Tablet technisch in derselben Gruppe befindet wie ein 5-Zoll-Mobilteil (die große Gruppe). Während diese beiden Geräte scheinbar nahe beieinander liegen Der Speicherplatz für die Benutzeroberfläche einer Anwendung unterscheidet sich erheblich, ebenso wie der Stil der Benutzerinteraktion. Daher sollte ein 7 "- und 5" -Bildschirm nicht immer dasselbe Layout verwenden. Damit können Sie unterschiedliche Layouts für diese bereitstellen Mit Android, zwei Arten von Bildschirmen, können Sie jetzt Ihre Layoutressourcen basierend auf der Breite und / oder Höhe angeben, die tatsächlich für das Layout Ihrer Anwendung verfügbar sind, angegeben in dp-Einheiten.

Nachdem Sie beispielsweise das Layout entworfen haben, das Sie für Geräte im Tablet-Stil verwenden möchten, stellen Sie möglicherweise fest, dass das Layout nicht mehr funktioniert, wenn der Bildschirm weniger als 600 dp breit ist. Dieser Schwellenwert wird somit zur Mindestgröße, die Sie für Ihr Tablet-Layout benötigen. Daher können Sie jetzt festlegen, dass diese Layoutressourcen nur verwendet werden sollen, wenn für die Benutzeroberfläche Ihrer Anwendung mindestens 600 dp Breite verfügbar sind.

Sie sollten entweder eine Breite und ein Design als Mindestgröße auswählen oder testen, welche Breite Ihr Layout nach Abschluss am kleinsten unterstützt.

Hinweis: Beachten Sie, dass alle mit diesen neuen Größen-APIs verwendeten Zahlen dichteunabhängige Pixelwerte (dp) sind und Ihre Layoutabmessungen auch immer mit dp-Einheiten definiert werden sollten, da Sie sich für den nach dem System verfügbaren Bildschirmplatz interessieren berücksichtigt die Bildschirmdichte (im Gegensatz zur Verwendung der Rohpixelauflösung). Weitere Informationen zu dichteunabhängigen Pixeln finden Sie unter Begriffe und Konzepte weiter oben in diesem Dokument. Verwenden neuer Größenqualifizierer

Die verschiedenen Ressourcenkonfigurationen, die Sie basierend auf dem für Ihr Layout verfügbaren Speicherplatz angeben können, sind in Tabelle 2 zusammengefasst. Diese neuen Qualifizierer bieten Ihnen mehr Kontrolle über die spezifischen Bildschirmgrößen, die Ihre Anwendung unterstützt, im Vergleich zu den herkömmlichen Bildschirmgrößengruppen (klein, normal, groß und groß).

Hinweis: Die Größen, die Sie mit diesen Qualifikationsmerkmalen angeben, entsprechen nicht den tatsächlichen Bildschirmgrößen. Die Größen beziehen sich vielmehr auf die Breite oder Höhe in dp-Einheiten, die im Fenster Ihrer Aktivität verfügbar sind. Das Android-System verwendet möglicherweise einen Teil des Bildschirms für die Benutzeroberfläche des Systems (z. B. die Systemleiste am unteren Bildschirmrand oder die Statusleiste am oberen Bildschirmrand), sodass ein Teil des Bildschirms möglicherweise nicht für Ihr Layout verfügbar ist. Daher sollten die von Ihnen deklarierten Größen speziell auf die von Ihrer Aktivität benötigten Größen abgestimmt sein. Das System berücksichtigt den von der Systembenutzeroberfläche verwendeten Speicherplatz, wenn es angibt, wie viel Speicherplatz es für Ihr Layout bereitstellt. Beachten Sie auch, dass die Aktionsleiste als Teil des Fensterbereichs Ihrer Anwendung betrachtet wird, obwohl Ihr Layout dies nicht deklariert. Dadurch wird der für Ihr Layout verfügbare Speicherplatz verringert und Sie müssen dies in Ihrem Entwurf berücksichtigen.

Tabelle 2. Neue Konfigurationsqualifizierer für die Bildschirmgröße (eingeführt in Android 3.2). Bildschirmkonfiguration Qualifiziererwerte Beschreibung smallWidth swdp

Beispiele: sw600dp sw720dp

Die Grundgröße eines Bildschirms, angegeben durch die kürzeste Abmessung des verfügbaren Bildschirmbereichs. Insbesondere ist die kleinste Breite des Geräts die kürzeste verfügbare Höhe und Breite des Bildschirms (Sie können sie auch als die "kleinstmögliche Breite" des Bildschirms betrachten). Mit diesem Qualifikationsmerkmal können Sie sicherstellen, dass für Ihre Benutzeroberfläche unabhängig von der aktuellen Ausrichtung des Bildschirms mindestens dps Breite für die Benutzeroberfläche verfügbar sind.

Wenn Ihr Layout beispielsweise erfordert, dass die kleinste Dimension der Bildschirmfläche immer mindestens 600 dp beträgt, können Sie dieses Qualifikationsmerkmal verwenden, um die Layoutressourcen res / layout-sw600dp / zu erstellen. Das System verwendet diese Ressourcen nur, wenn die kleinste Dimension des verfügbaren Bildschirms mindestens 600 dp beträgt, unabhängig davon, ob die 600 dp-Seite die vom Benutzer wahrgenommene Höhe oder Breite ist. Die kleinste Breite ist eine feste Bildschirmgröße, die für das Gerät charakteristisch ist. Die kleinste Breite des Geräts ändert sich nicht, wenn sich die Ausrichtung des Bildschirms ändert.

Die kleinste Breite eines Geräts berücksichtigt Bildschirmdekorationen und die Benutzeroberfläche des Systems. Wenn das Gerät beispielsweise einige persistente Benutzeroberflächenelemente auf dem Bildschirm hat, die den Platz entlang der Achse der kleinsten Breite berücksichtigen, deklariert das System die kleinste Breite als kleiner als die tatsächliche Bildschirmgröße, da dies Bildschirmpixel sind, die für Ihre Benutzeroberfläche nicht verfügbar sind.

Dies ist eine Alternative zu den allgemeinen Qualifikationsmerkmalen für die Bildschirmgröße (klein, normal, groß, groß), mit denen Sie eine diskrete Zahl für die für Ihre Benutzeroberfläche verfügbare effektive Größe definieren können. Die Verwendung der kleinsten Breite zur Bestimmung der allgemeinen Bildschirmgröße ist nützlich, da die Breite häufig der treibende Faktor beim Entwerfen eines Layouts ist. Eine Benutzeroberfläche wird häufig vertikal gescrollt, hat jedoch ziemlich strenge Einschränkungen hinsichtlich des minimalen Platzbedarfs, den sie horizontal benötigt. Die verfügbare Breite ist auch der Schlüsselfaktor für die Entscheidung, ob ein Ein-Fenster-Layout für Mobilteile oder ein Mehr-Fenster-Layout für Tablets verwendet werden soll. Daher ist es Ihnen wahrscheinlich am wichtigsten, welche Breite auf jedem Gerät so klein wie möglich ist. Verfügbare Bildschirmbreite wdp

Beispiele: w720dp w1024dp

Gibt eine minimale verfügbare Breite in dp-Einheiten an, bei der die Ressourcen verwendet werden sollen - definiert durch den Wert. Der entsprechende Wert des Systems für die Breite ändert sich, wenn die Ausrichtung des Bildschirms zwischen Quer- und Hochformat wechselt, um die aktuelle tatsächliche Breite widerzuspiegeln, die für Ihre Benutzeroberfläche verfügbar ist.

Dies ist häufig hilfreich, um zu bestimmen, ob ein Layout mit mehreren Fenstern verwendet werden soll, da Sie selbst auf einem Tablet-Gerät häufig nicht dasselbe Layout mit mehreren Fenstern für die Hochformatausrichtung wie für Querformat benötigen. Auf diese Weise können Sie die für das Layout erforderliche Mindestbreite angeben, anstatt die Qualifikationsmerkmale für Bildschirmgröße und Ausrichtung zusammen zu verwenden. Verfügbare Bildschirmhöhe HDP

Beispiele: h720dp h1024dp etc.

Gibt eine minimale Bildschirmhöhe in dp-Einheiten an, bei der die Ressourcen verwendet werden sollen - definiert durch den Wert. Der entsprechende Wert des Systems für die Höhe ändert sich, wenn die Ausrichtung des Bildschirms zwischen Quer- und Hochformat wechselt, um die aktuelle tatsächliche Höhe wiederzugeben, die für Ihre Benutzeroberfläche verfügbar ist.

Die Verwendung dieser Option zum Definieren der für Ihr Layout erforderlichen Höhe ist genauso nützlich wie wdp zum Definieren der erforderlichen Breite, anstatt sowohl die Qualifizierer für Bildschirmgröße als auch Ausrichtung zu verwenden. Die meisten Apps benötigen dieses Qualifikationsmerkmal jedoch nicht, da Benutzeroberflächen häufig vertikal scrollen und daher flexibler mit der verfügbaren Höhe sind, während die Breite starrer ist.

Die Verwendung dieser Qualifizierer scheint zwar komplizierter zu sein als die Verwendung von Bildschirmgrößengruppen, sie sollte jedoch einfacher sein, sobald Sie die Anforderungen für Ihre Benutzeroberfläche festgelegt haben. Wenn Sie Ihre Benutzeroberfläche entwerfen, ist Ihnen wahrscheinlich vor allem die tatsächliche Größe wichtig, bei der Ihre Anwendung zwischen einer Benutzeroberfläche im Mobilteilstil und einer Benutzeroberfläche im Tablet-Stil wechselt, die mehrere Bereiche verwendet. Der genaue Punkt dieses Schalters hängt von Ihrem speziellen Design ab. Vielleicht benötigen Sie eine Breite von 720 dp für Ihr Tablet-Layout, vielleicht reichen 600 dp oder 480 dp oder eine Zahl dazwischen. Mit diesen Qualifikationsmerkmalen in Tabelle 2 haben Sie die Kontrolle über die genaue Größe, bei der sich Ihr Layout ändert.

Weitere Informationen zu diesen Größenkonfigurationsqualifizierern finden Sie im Dokument Bereitstellen von Ressourcen. Konfigurationsbeispiele

Im Folgenden finden Sie einige Zahlen für typische Bildschirmbreiten, damit Sie einige Ihrer Designs auf verschiedene Gerätetypen ausrichten können:

320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
480dp: a tweener tablet like the Streak (480x800 mdpi).
600dp: a 7 tablet (600x1024 mdpi).
720dp: a 10 tablet (720x1280 mdpi, 800x1280 mdpi, etc).

Mithilfe der Größenqualifizierer aus Tabelle 2 kann Ihre Anwendung zwischen Ihren verschiedenen Layoutressourcen für Mobilteile und Tablets wechseln, indem Sie eine beliebige Anzahl für Breite und / oder Höhe verwenden. Wenn beispielsweise 600 dp die kleinste verfügbare Breite ist, die von Ihrem Tablet-Layout unterstützt wird, können Sie diese beiden Layouts bereitstellen:

res / layout / main_activity.xml # Für Mobilteile res / layout-sw600dp / main_activity.xml # Für Tablets

In diesem Fall muss die kleinste Breite des verfügbaren Bildschirmbereichs 600 dp betragen, damit das Tablet-Layout angewendet werden kann.

In anderen Fällen, in denen Sie Ihre Benutzeroberfläche weiter anpassen möchten, um zwischen Größen wie 7- und 10-Zoll-Tablets zu unterscheiden, können Sie zusätzliche Layouts mit der kleinsten Breite definieren:

res / layout / main_activity.xml # Für Mobilteile (kleiner als 600 dp verfügbare Breite) res / layout-sw600dp / main_activity.xml # Für 7-Zoll-Tablets (600 dp breit und größer) res / layout-sw720dp / main_activity.xml

Für 10-Zoll-Tablets (720 dp breit und größer)

Beachten Sie, dass die beiden vorherigen Sätze von Beispielressourcen das Qualifikationsmerkmal "kleinste Breite" (swdp) verwenden, das die kleinste der beiden Seiten des Bildschirms angibt, unabhängig von der aktuellen Ausrichtung des Geräts. Die Verwendung von swdp ist daher eine einfache Möglichkeit, die für Ihr Layout verfügbare Gesamtbildschirmgröße anzugeben, indem Sie die Ausrichtung des Bildschirms ignorieren.

In einigen Fällen kann es jedoch für Ihr Layout wichtig sein, wie viel Breite oder Höhe derzeit verfügbar ist. Wenn Sie beispielsweise ein Layout mit zwei Fenstern und zwei Fragmenten nebeneinander haben, können Sie es verwenden, wenn der Bildschirm mindestens 600 dp breit ist, unabhängig davon, ob sich das Gerät im Quer- oder Hochformat befindet. In diesem Fall sehen Ihre Ressourcen möglicherweise folgendermaßen aus:

res / layout / main_activity.xml # Für Mobilteile (kleiner als 600 dp verfügbare Breite) res / layout-w600dp / main_activity.xml # Mehrfachfenster (jeder Bildschirm mit 600 dp verfügbarer Breite oder mehr)

Beachten Sie, dass der zweite Satz das Qualifikationsmerkmal "verfügbare Breite" wdp verwendet. Auf diese Weise kann ein Gerät abhängig von der Ausrichtung des Bildschirms tatsächlich beide Layouts verwenden (wenn die verfügbare Breite in einer Ausrichtung mindestens 600 dp und in der anderen Ausrichtung weniger als 600 dp beträgt).

Wenn Ihnen die verfügbare Höhe ein Anliegen ist, können Sie dies auch mit dem HDP-Qualifikationsmerkmal tun. Oder kombinieren Sie sogar die wdp- und hdp-Qualifikationsmerkmale, wenn Sie wirklich spezifisch sein müssen.

Herry
quelle
7
Diese kleinen / normalen / großen / großen sind derzeit (Dezember 2014) veraltet. Der bevorzugte Weg ist jetzt die Verwendung von "swxxxdp". Siehe developer.android.com/guide/practices/…
espinchi
1
@espinchi danke, du solltest dies auch als Antwort posten. Gibt es auch empfohlene dp's? Zum Beispiel sind Standards: 100sw, 200sw, 400sw, 600sw.
Vince V.
19

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

  1. res / values-hdpi / dimension.xml
  2. res / values-xhdpi / dimension.xml
  3. res / values-xxhdpi / dimension.xml
  4. res / values-xxxhdpi / dimension.xml

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.

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">4px</dimen>
</resources>

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

  1. HDPI: 12px
  2. xhdpi: 18px
  3. xxhdpi: 24px
  4. xxxhdpi: 36px

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.

Rahul Sharma
quelle
4
Ist es nicht eine schlechte Praxis, px anstelle von sp in der Textgröße zu verwenden? Gibt es eine Möglichkeit, das folgende Verhältnis mit sp anstelle von px zu erreichen?
Red M
Ich habe überprüft, ob dies gut funktioniert, aber ich bin immer noch verwirrt. Ist es eine gute Praxis, Werte in px anstelle von dp / sp zu verwenden? Ich habe noch nie in der offiziellen Dokumentation gesehen, dass Werte in px verwendet werden.
Shaby
1
Verwenden Sie sp für die Schriftgröße, das ist das Gesetz. Der Ansatz, den Rahul gezeigt hat, ist korrekt. Verwenden Sie einfach sp anstelle von px.
Mihir Patel
sp sollte verwendet werden, wenn geplant wird, die Schriftgröße der App mit der Schriftgröße des Systems zu verknüpfen. Andernfalls ist diese Lösung nicht schlecht.
Irfan Ul Haq
11

Manchmal ist es besser, nur drei Optionen zu haben

 style="@android:style/TextAppearance.Small"

Verwenden Sie klein und groß, um von der normalen Bildschirmgröße zu unterscheiden.

<TextView
            android:id="@+id/TextViewTopBarTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@android:style/TextAppearance.Small"/>

Für normal müssen Sie nichts angeben.

<TextView
            android:id="@+id/TextViewTopBarTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

Auf diese Weise können Sie vermeiden, Abmessungen für verschiedene Bildschirmgrößen zu testen und anzugeben.

Kalan Nawarathne
quelle
10

Ich habe das gleiche nach Dimension gemacht und so etwas gemalt (mit dp aber nur für Text und in drawText ())

XML:

   <dimen name="text_size">30sp</dimen>

Code:

   Paint p =new Paint();
       p.setTextSize(getResources().getDimension(R.dimen.text_Size));
Lebensstil
quelle
8
Sie sollten NICHT dpfür die Textgröße verwenden ... verwenden Sie spstattdessen.
Yousha Aleayoub
Bitte verwenden Sie sp für die Textgröße
Thinsky
Sie können dp in bestimmten Situationen verwenden, wenn Sie nicht möchten, dass die Größe basierend auf den Benutzereinstellungen geändert wird.
7

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

Muhammad Maqsood
quelle
2
SDP ist für die Bildschirmgröße; benutze ssp für die Textgröße
ecle
Dies funktioniert für mich, aber ich vermute, es gibt zu viele Dateien zum Hinzufügen. Dies erhöht die Größe der App. @Muhammad Sie können die Größe ändern und nur Klassen hinzufügen, was auch immer benötigt wird
Kirtikumar A.
1

Wenn Sie über API 26 verfügen, können Sie autoSizeTextType verwenden :

<Button
  app:autoSizeTextType="uniform" />

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

Bonne Bogaert
quelle
Das Problem dabei ist, dass die Textgröße für mehrere Textansichten mit Strings unterschiedlicher Länge nicht einheitlich geändert wird
Sourabh S Nath
0

Ich denke, Sie können dies archivieren, indem Sie für jede Bildschirmgröße mehrere Layoutressourcen hinzufügen. Beispiel:

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size with small text
res/layout-large/my_layout.xml       // layout for large screen size with larger text
res/layout-xlarge/my_layout.xml      // layout for extra large screen size with even larger text
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

Referenz: 1. http://developer.android.com/guide/practices/screens_support.html

NguyenDat
quelle
2
Verwenden Sie res / values-small ist möglicherweise besser.
Einverne
1
eine der schlechteren Implementierungen. müssen wir 5 Layouts pflegen, nur um verschiedene Größen zu unterstützen?
SolidSnake
Es ist wirklich eine schlechte Idee, verschiedene Layouts zu erstellen, um nur die Textgröße in verschiedenen Bildschirmen zu reduzieren. Ich empfehle das nicht
Saman Salehi
0

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.

SolidSnake
quelle
0

Sie können auch weightSumund layout_weightproperty verwenden, um Ihren unterschiedlichen Bildschirm anzupassen.

Dafür müssen Sie android:layout_width= 0dp und android:layout_width= (was auch immer Sie wollen) machen;

Harshit
quelle
-1

Wie @espinchi ab 3.2 (API Level 13) erwähnt, sind Größengruppen veraltet. Bildschirmgrößenbereiche sind der bevorzugte Ansatz für die Zukunft.

Jacques Kammeyer
quelle
-2

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:

<TextView
        android:id="@+id/dummyTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:text="TextView" />

Und in Ihrem Code zum Beispiel:

TextView testTextView = (TextView) rootView.findViewById(R.id.dummyTextView);
float textSize = testTextView.getTextSize();

Behalten Sie textSizeals Referenz bei, zu der Sie eine konstante Größe oder eine Percetage-Größe hinzufügen können (durch Berechnung).

Athlan
quelle