webentwicklung-frage-antwort-db.com.de

Wie kann ich das Android-Layout so einstellen, dass es alle Bildschirmgrößen unterstützt?

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?

20
wolverine

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. 

17
Ghost

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?

http://www.emirweb.com/ScreenDeviceStatistics.php

Beliebteste Bildschirmgrößen/Auflösungen auf Android-Handys

28

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/LayoutsBreite 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.

9
Muhammad Babar

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.

https://github.com/intuit/sdp

1
Kamil Ibadov

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' }
0
Unknown

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