Bei der Unterstützung unterschiedlicher Bildschirmgrößen (-dichten) in Android liegt der Fokus häufig darauf, unterschiedliche Layouts für jeden möglichen Bildschirm zu erstellen. I.E.
Ich habe ein Layout für einen xhdpi Bildschirm als Referenz entworfen und dessen Abmessungen in definiert. dimens.xml. Jetzt möchte ich jede mögliche Bildschirmgröße unterstützen. Wie kann ich das machen?
Soweit ich weiß, kann ich mit dem Tool this das richtige dimens.xml für andere Bildschirmgrößen und ermitteln füge es meinem Projekt hinzu. Ist dies in meiner Situation der richtige Weg?
Eine andere Frage, muss ich nur dimens.xml für die obigen Bildschirmabmessungen erstellen? Wenn ja, was ist dann w820dp
?
Danke für Ihre Hilfe. Ich muss nur Telefone unterstützen (keine Tablets oder andere Geräte).
Sie müssen einen Ordner Unterschiedliche Werte für unterschiedliche Bildschirme erstellen. Mögen
values-sw720dp 10.1” tablet 1280x800 mdpi
values-sw600dp 7.0” tablet 1024x600 mdpi
values-sw480dp 5.4” 480x854 mdpi
values-sw480dp 5.1” 480x800 mdpi
values-xxhdpi 5.5" 1080x1920 xxhdpi
values-xxxhdpi 5.5" 1440x2560 xxxhdpi
values-xhdpi 4.7” 1280x720 xhdpi
values-xhdpi 4.65” 720x1280 xhdpi
values-hdpi 4.0” 480x800 hdpi
values-hdpi 3.7” 480x854 hdpi
values-mdpi 3.2” 320x480 mdpi
values-ldpi 3.4” 240x432 ldpi
values-ldpi 3.3” 240x400 ldpi
values-ldpi 2.7” 240x320 ldpi
Weitere Informationen finden Sie hier
Ordner mit verschiedenen Werten in Android
http://Android-developers.blogspot.in/2011/07/new-toolss-for-managing-screen-sizes.html
Bearbeitet von @ humblerookie
Sie können Android Studio-Plugin mit dem Namen Dimenify verwenden, um automatisch Bemaßungswerte für andere Pixel-Buckets basierend auf benutzerdefinierten Skalierungsfaktoren zu generieren Alle Probleme/Vorschläge, die Sie dem Entwickler übermitteln.
Obwohl es theoretisch eine gute Idee ist, ein anderes Layout für verschiedene Bildschirmgrößen zu erstellen, kann es sehr schwierig werden, alle Bildschirmabmessungen und Pixeldichten zu berücksichtigen. Mehr als 20 verschiedene dimens.xml
- Dateien, wie in den obigen Antworten vorgeschlagen, zu haben, ist überhaupt nicht einfach zu verwalten.
Verwendung:
So verwenden Sie sdp
:
implementation 'com.intuit.sdp:sdp-Android:1.0.5'
In Ihren build.gradle
Ein.Ersetzen Sie jeden dp
-Wert wie 50dp
Durch einen @dimen/50_sdp
Wie folgt:
<TextView
Android:layout_width="@dimen/_50sdp"
Android:layout_height="@dimen/_50sdp"
Android:text="Hello World!" />
Wie es funktioniert:
sdp
skaliert mit der Bildschirmgröße, da es sich im Wesentlichen um eine große Liste unterschiedlicher dimens.xml
für jeden möglichen dp
Wert handelt.
In Aktion sehen:
Hier handelt es sich um drei Geräte mit sehr unterschiedlichen Bildschirmabmessungen und -dichten:
Beachten Sie, dass die sdp
Größeneinheitsberechnung aufgrund einiger Leistungs- und Verwendbarkeitsbeschränkungen eine gewisse Annäherung enthält.
wir möchten die Änderungen der erforderlichen Ansichtsgröße auf verschiedenen Bildschirmen anzeigen.
Wir müssen einen anderen Wertordner für verschiedene Bildschirme erstellen und die Datei dimens.xml basierend auf der Bildschirmdichte ablegen.
Ich habe ein TextView genommen und die Änderungen beobachtet, als ich dimens.xml in den verschiedenen Wertordnern änderte.
Bitte folgen Sie dem Prozess
Die folgenden Geräte können die Größe von Bildschirmen ändern, wenn wir die Datei normal - xhdpi\dimens.xml ändern
nexus 5X (5.2 "* 1080 * 1920: 420 dpi)
nexus 6P (5,7 "* 1440 * 2560: 560 dpi)
nexus 6 (6.0 "* 1440 * 2560: 560 dpi)
nexus 5 (5.0 ", 108 1920: xxhdpi)
nexus 4 (4,7 ", 768 * 1280: xhdpi)
Galaxy Nexus (4,7 ", 720 * 1280: xhdpi)
4,65 "720p (720 * 1280: xhdpi)
4,7 "WXGA (1280 * 720: Xhdpi)
Die folgenden Geräte können die Größe von Bildschirmen ändern, wenn wir die Datei Xlarge - xhdpi\dimens.xml ändern
nexus 9 (8,9 ", 2048 * 1556: xhdpi)
nexus 10 (10,1 ", 2560 * 1600: xhdpi)
Die folgenden Geräte können die Größe von Bildschirmen ändern, wenn wir die Datei large - xhdpi\dimens.xml ändern
nexus 7 (7.0 ", 1200 * 1920: xhdpi)
nexus 7 (2012) (7.0 ", 800 * 1280: tvdpi)
Die folgenden Geräte können die Größe der Bildschirme ändern, wenn wir die Datei large - mdpi\dimens.xml ändern
5,1 "WVGA (480 * 800: mdpi)
5,4 "FWVGA (480 * 854: mdpi)
7,0 "WSVGA (Tablet) (1024 × 600: mdpi)
Die folgenden Geräte können die Größe der Bildschirme ändern, wenn wir die Datei normal - hdpi\dimens.xml ändern
nexus s (4,0 ", 480 * 800: HDPI)
nexus One (3,7 ", 480 * 800: HDPI)
Die folgenden Geräte können die Größe der Bildschirme ändern, wenn wir die Datei small - ldpi\dimens.xml ändern
2,7 "QVGA Slider (240 * 320: ldpi)
2,7 "QVGA (240 * 320: ldpi)
Die folgenden Geräte können die Größe von Bildschirmen ändern, wenn wir die Datei xlarge - mdpi\dimens.xml ändern
10,1 "WXGA (Tablet) (1280 * 800: MDPI)
Die folgenden Geräte können die Größe der Bildschirme ändern, wenn wir die Datei normal - ldpi\dimens.xml ändern
3,3 "WQVGA (240 * 400: LDPI)
3,4 "WQVGA (240 * 432: LDPI)
Die folgenden Geräte können die Größe der Bildschirme ändern, wenn wir die Datei normal - hdpi\dimens.xml ändern
4,0 "WVGA (480 * 800: HDPI)
3,7 "WVGA (480 * 800: hdpi)
3,7 "FWVGA Slider (480 * 854: hdpi)
Die folgenden Geräte können die Größe der Bildschirme ändern, wenn wir die Datei "normal - mdpi\dimens.xml" ändern
3,2 "HVGA Slider (ADP1) (320 * 480: MDPI)
3,2 "QVGA (ADP2) (320 * 480: MDPI)
Ich habe ein einfaches Java) - Programm hochgeladen, das Ihren Projektspeicherort und die gewünschte Dimensionsdatei als Eingabe verwendet. Basierend darauf würde es die entsprechende Dimensionsdatei in der Konsole ausgeben. Hier ist der Link zu es:
https://github.com/akeshwar/Dimens-for-different-screens-in-Android/blob/master/Main.Java
Hier ist der vollständige Code für die Referenz:
public class Main {
/**
* You can change your factors here. The current factors are in accordance with the official documentation.
*/
private static final double LDPI_FACTOR = 0.375;
private static final double MDPI_FACTOR = 0.5;
private static final double HDPI_FACTOR = 0.75;
private static final double XHDPI_FACTOR = 1.0;
private static final double XXHDPI_FACTOR = 1.5;
private static final double XXXHDPI_FACTOR = 2.0;
private static double factor;
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
System.out.println("Enter the location of the project/module");
String projectPath = in.nextLine();
System.out.println("Which of the following dimension file do you want?\n1. ldpi \n2. mdpi \n3. hdpi \n4. xhdpi \n5. xxhdpi \n6. xxxhdpi");
int dimenType = in.nextInt();
switch (dimenType) {
case 1: factor = LDPI_FACTOR;
break;
case 2: factor = MDPI_FACTOR;
break;
case 3: factor = HDPI_FACTOR;
break;
case 4: factor = XHDPI_FACTOR;
break;
case 5: factor = XXHDPI_FACTOR;
break;
case 6: factor = XXXHDPI_FACTOR;
break;
default:
factor = 1.0;
}
//full path = "/home/akeshwar/Android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/src/main/res/values/dimens.xml"
//location of the project or module = "/home/akeshwar/Android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/"
/**
* In case there is some I/O exception with the file, you can directly copy-paste the full path to the file here:
*/
String fullPath = projectPath + "/src/main/res/values/dimens.xml";
FileInputStream fstream = new FileInputStream(fullPath);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
while ((strLine = br.readLine()) != null) {
modifyLine(strLine);
}
br.close();
}
private static void modifyLine(String line) {
/**
* Well, this is how I'm detecting if the line has some dimension value or not.
*/
if(line.contains("p</")) {
int endIndex = line.indexOf("p</");
//since indexOf returns the first instance of the occurring string. And, the actual dimension would follow after the first ">" in the screen
int begIndex = line.indexOf(">");
String prefix = line.substring(0, begIndex+1);
String root = line.substring(begIndex+1, endIndex-1);
String suffix = line.substring(endIndex-1,line.length());
/**
* Now, we have the root. We can use it to create different dimensions. Root is simply the dimension number.
*/
double dimens = Double.parseDouble(root);
dimens = dimens*factor*1000;
dimens = (double)((int)dimens);
dimens = dimens/1000;
root = dimens + "";
System.out.println(prefix + " " + root + " " + suffix );
}
System.out.println(line);
}
}
Sie müssen einen anderen values
Ordner für verschiedene Bildschirme erstellen und dimens.xml
Datei nach Dichte.
1) values
2) values-hdpi (320x480 ,480x800)
3) values-large-hdpi (600x1024)
4) values-xlarge (720x1280 ,768x1280 ,800x1280 ,Nexus7 ,Nexus10)
5) values-sw480dp (5.1' WVGA screen)
6) values-xhdpi (Nexus4 , Galaxy Nexus)
Du kannst Geben dimens.xml
im
1) Werte
2) Werte-hdpi
3) Werte-xhdpi
4) Werte-xxhdpi
Und gib verschiedene Größen in dimens.xml
in entsprechenden Ordnern nach Dichte.
Es gibt nette Bibliotheken, die sich um alles kümmern und Ihre Schmerzen lindern. Fügen Sie dazu einfach zwei Abhängigkeiten in gradle hinzu:
implementation 'com.intuit.ssp:ssp-Android:1.0.5'
implementation 'com.intuit.sdp:sdp-Android:1.0.5'
Verwenden Sie danach dimens
wie folgt:
Android:layout_marginTop="@dimen/_80sdp"
Für den Fall, dass Sie mehr anzeigen möchten: Hier ist ein Link für eine Liste von Geräten (Tablet, Handy, Uhren), einschließlich watch
, chromebook
, windows
und mac
. Hier finden Sie die Dichte, Abmessungen usw. Wenn Sie auch einen Emulator verwenden, ist dies eine gute Ressource.
Wenn Sie auf ein bestimmtes Element klicken, werden auf der rechten Seite weitere Details angezeigt.
Da es sich um Android
handelt, werde ich einen entsprechenden Beitrag veröffentlichen.
~ Es ist besser, wenn Sie eine Kopie des Webs speichern. So zeigen Sie es offline an.
Android 3.2 führt einen neuen Ansatz für Bildschirmgrößen ein. Die Zahlen, die die Bildschirmgröße beschreiben, sind alle in "dp" -Einheiten angegeben. Meistens können wir sie verwenden
kleinste Breite dp: die kleinste für das Anwendungslayout verfügbare Breite in "dp" -Einheiten; Dies ist die kleinste Breite dp, die Sie jemals bei einer Drehung des Displays feststellen werden.
Um einen Rechtsklick zu erstellen, klicken Sie auf res >>> new >>> Android-Ressourcenverzeichnis
Von Verfügbare Qualifikatoren Fenster verschieben Kleinste Bildschirmbreite nach Ausgewählte Qualifikatoren
In Bildschirmbreite Fenster schreiben Sie einfach den "dp" -Wert ab Sie möchten Android Studio, um diese Dimensionen zu verwenden.
Wechseln Sie in die Ansicht Projekt und klicken Sie mit der rechten Maustaste auf das neu erstellte Ressourcenverzeichnis
new >>> Values resource file Geben Sie einen neuen Dateinamen ein dimens.xml und fertig.