Ich entwickle ein Programm auf Android Version2.2. Ich habe viele Dokumentationen zur Unterstützung mehrerer Bildschirmgrößen gelesen, aber immer noch verwirrt. Ich entwarf eine Layout-Datei, die für große und normale Bildschirme unterstützt, wenn du es mit kleinem Bildschirm versuche, ist es nicht das Layout Anpassung an den Bildschirm angepasst. Ich habe diesen Code auch im Manifest verwendet.
<supports-screens
Android:resizeable="true"
Android:smallScreens="true"
Android:normalScreens="true"
Android:largeScreens="true"
Android:anyDensity="true"
/>
Das Bild für den kleinen Bildschirm ist hier. Wie kann ich den Bildschirm so einstellen, dass er mit dem kleinen Bildschirm kompatibel ist? Irgendwo habe ich mit Hilfe der Ordner „Layout-small“ gefunden, aber wenn ich diese verwenden, wird die Projektgröße zu erhöhen, ich will nicht, dass, so kann jemand vorschlagen mich der beste Weg, dies zu tun?
Bitte gehen Sie die folgenden Links durch. Diese können Ihnen helfen:
Verschiedene Bildschirmgrößen unterstützen
Mehrere Bildschirme unterstützen
Unterstützung unterschiedlicher Dichten
Tablets und Handsets unterstützen
AFAIK, der einzige Weg, um alle Bildschirme zu unterstützen, ist durch diesen Ordner Gabelung zu tun. Jede XML-Datei reicht bis zu einigen Kilobytes. Größe sollte also nicht zu groß sein.
Lösung für alle Bildschirme und unterstützt das gesamte Layout.
ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi
ic_launcher 36x36 48x48 72x72 96x96 144x144 192x192
Notification 18x18 24x24 36x36 48x48 72x72 96x96
Action Bar & Tab 24*24 32*32 48*48 64*64 96*96 128*128
Background 240x320 320x480 480x800 720x1280 1080x1920 1440X2560
Zeichenbarer Ordner:
res/drawable (default)
res/drawable-ldpi/ (240x320 and nearer resolution)
res/drawable-mdpi/ (320x480 and nearer resolution)
res/drawable-hdpi/ (480x800, 540x960 and nearer resolution)
res/drawable-xhdpi/ (720x1280 - Samsung S3, Micromax Canvas HD etc)
res/drawable-xxhdpi/ (1080x1920 - Samsung S4, HTC one, Nexus 5, etc)
res/drawable-xxxhdpi/ (1440X2560 - Nexus 6,Samsung S6Edge).
ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi
Layout:
layout-large-mdpi (1024x600)
layout-large-tvdpi (800x1280)
layout-large-xhdpi (1200x1920)
layout-xlarge-mdpi (1280x800)
layout-xlarge-xhdpi (2560x1600)
res/layout/activity_main.xml # For handsets (smaller than 600dp available width)
res/layout-sw600dp/activity_main.xml # For 7 inches tablets (600dp wide and bigger)
res/layout-sw720dp/activity_main.xml # For 10 inches tablets (720dp wide and bigger)
OR
res/layout/layout #this is the default
res/layout/layout-large #for 7 inches tablet and images from res/drawable-mdpi/xyz.png
res/layout/layout-xlarge #for 10 inches tablet
Links verweisen:
Andere Auflösung unterstützt Android
https://developer.Android.com/guide/practices/screens_support.html
https://design.google.com/devices/
Gibt es eine Liste von Bildschirmauflösungen für alle Android-basierten Handys und Tablets?
Ja, ich habe die bekommt Heilung, um Ihr Problem, Sie haben Recht, ich persönlich denke, dass Layouts für jede Bildschirmauflösung zu machen ist Zeit zu nehmen, und machen Sie Ihre Projektgröße groß gehen.
Um ein Layout zu machen, die in alle Bildschirmauflösung paßt ich meine eigene Technik d.h Einstellung Breite und Höhe in Prozent umgesetzt habe
Das Problem tritt auf, wenn wir mit einer Konstanten gesetzt Views/Layouts
Breite oder Höhe Wert läßt 100dp
sagen.
Lösung ist ganz einfach versuchen match_parent
zu verwenden, so dass die Sicht leeren Raum füllen oder verwenden weight
und jede View
im Verhältnis zu anderen Views
definiert dies Ihr Layout gut aussieht in fast allen Bildschirmauflösungen und zur Laufzeit festgelegt helfen LayoutParams
nur diejenigen Views/Layouts
das hat eine konstante Breite oder Höhe in Bezug auf Prozent.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<LinearLayout
Android:id="@+id/mLayout"
Android:layout_width="280px"
Android:layout_height="300px" />
</RelativeLayout>
Hinweis: Ich habe verwendet px für feste Größe Layouts der Breite/Höhe, weil in LayoutParams layoutParams = new LayoutParams(int width, int height);
der width
und height
nimmt Wert als Pixel
Hier ist ein Beispielcode
final ViewTreeObserver mLayoutObserver = mLayout.getViewTreeObserver();
mLayoutObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
DisplayMetrics metrics = getResources().getDisplayMetrics();
int deviceWidth = metrics.widthPixels;
int deviceHeight = metrics.heightPixels;
float widthInPercentage = ( (float) 280 / 320 ) * 100; // 280 is the width of my LinearLayout and 320 is device screen width as i know my current device resolution are 320 x 480 so i'm calculating how much space (in percentage my layout is covering so that it should cover same area (in percentage) on any other device having different resolution
float heightInPercentage = ( (float) 300 / 480 ) * 100; // same procedure 300 is the height of the LinearLayout and i'm converting it into percentage
int mLayoutWidth = (int) ( (widthInPercentage * deviceWidth) / 100 );
int mLayoutHeight = (int) ( (heightInPercentage * deviceHeight) / 100 );
LayoutParams layoutParams = new LayoutParams(mLayoutWidth, mLayoutHeight);
mLayout.setLayoutParams(layoutParams);
}
});
Ich denke, der Code ist ziemlich selbsterklärend, wenn noch jemand Hilfe braucht, die man sofort fragen kann
Fazit: Wenn Sie eine Konstante einstellen Breite/Höhe für Ihre Views/Layouts
immer eingestellten Wert in px in Layoutdatei (d xml) und dann LayoutParams
programmatisch festgelegt.
Vorschlag: Ich denke, Google Android Jungs ernsthaft für den Ersatz der dp/dip
Einheiten denken sollte percentage
.
Jetzt unterschiedliche Bildschirmgröße zu unterstützen ist einfacher! Verwenden Sie eine neue Größeneinheit SDP.
SDP - eine skalierbare Einheit
Ein Android-SDK, das eine neue Größeneinheit bereitstellt - sdp (skalierbares dp). Diese Größeneinheit skaliert mit der Bildschirmgröße. Es kann Android-Entwicklern helfen, mehrere Bildschirme zu unterstützen.
für Textansichten beziehen Sie sich bitte auf ssp , das sich auf die Größe der Einheit für Texte bezieht.
Skalierbarer DP (SDP) ist die beste Lösung. Die Größe der Widgets hängt von der Bildschirmgröße ab. Wir können dies auch für Text für unterschiedliche Textgrößen anwenden.
So fügen Sie Ihrem Projekt SDP hinzu (mithilfe von Android Studio und Gradle):
fügen Sie die Implementierung ' com.intuit.sdp: sdp-Android: 1.0.5 ' zu Ihrem Build.gradle-Abhängigkeitsblock hinzu.
for example:
dependencies {'com.intuit.sdp:sdp-Android:1.0.5' }
probier diese
<Android.support.constraint.ConstraintLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<ImageView
Android:layout_width="0dp"
Android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
Android:scaleType="fitXY"
Android:adjustViewBounds="true"
Android:src="@drawable/myimage"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>