getränte klassen nach gerätetype

  • Ich möchte nocheinmal auf das altbekannte thema Display Größen zurückkommen. Es geht darum, dass ich zwei verschidenen Klassen aufrufen möchte, jenachdem ob der App auf einem Tablet oder auf einem Handy leuft. Dazu würde ich gerne eine booleme variable bei programmstart definieren.

    Java
    if ([smallestWidth > 480) { IfTab = true; }


    Wie finde ich heraus ob mein App auf einem Tab oder einem Handy leuft?

  • Was ist die Grenze zwischen Tablet und Handy? Die Frage ist wohl eher, wo DU deine Grenze setzt.


    Ich denke mal, wenn in X- oder in Y-Richtung mindestens 700 Pixel sind, dann hast du wahrscheinlich ein Tablet.
    Aber dann rechne auch damit, dass es hochauflösende Displays bei Handys geben kann, dann sind die DPI auch wichtig für die Auswertung.


    Vielleicht entscheidest du dich auch für mehr als zwei Varianten - hängt von deiner Anwendung ab.

  • In der Doku habe ich folgende Seite gefunden: Rroviding Resources
    In der Tabelle "Table 2. Configuration qualifier names." werden alle Möglichkeiten aufgeführt.
    Am brauchbarsten scheint mir hier folgende Methode: smallestWidth. Ich zitiere:
    ------------------------------------------------------------------------------------------------------------------------------------------------
    "Qualifier Values:
    sw<N>dp


    Examples:
    sw320dp
    sw600dp
    sw720dp
    etc.
    Description
    The fundamental size of a screen, as indicated by the shortest dimension of the available screen area. Specifically, the device's smallestWidth is the shortest of the screen's available height and width (you may also think of it as the "smallest possible width" for the screen). You can use this qualifier to ensure that, regardless of the screen's current orientation, your application's has at least <N> dps of width available for it UI.


    For example, if your layout requires that its smallest dimension of screen area be at least 600 dp at all times, then you can use this qualifer to create the layout resources, res/layout-sw600dp/. The system will use these resources only when the smallest dimension of available screen is at least 600dp, regardless of whether the 600dp side is the user-perceived height or width. The smallestWidth is a fixed screen size characteristic of the device; the device's smallestWidth does not change when the screen's orientation changes.


    The smallestWidth of a device takes into account screen decorations and system UI. For example, if the device has some persistent UI elements on the screen that account for space along the axis of the smallestWidth, the system declares the smallestWidth to be smaller than the actual screen size, because those are screen pixels not available for your UI. Thus, the value you use should be the actual smallest dimension required by your layout (usually, this value is the "smallest width" that your layout supports, regardless of the screen's current orientation).


    Some values you might use here for common screen sizes:


    320, for devices with screen configurations such as:
    240x320 ldpi (QVGA handset)
    320x480 mdpi (handset)
    480x800 hdpi (high density handset)
    480, for screens such as 480x800 mdpi (tablet/handset).
    600, for screens such as 600x1024 mdpi (7" tablet).
    720, for screens such as 720x1280 mdpi (10" tablet).
    When your application provides multiple resource directories with different values for the smallestWidth qualifier, the system uses the one closest to (without exceeding) the device's smallestWidth.


    Added in API level 13.
    "


    ------------------------------------------------------------------------------------------------------------------------------------------------


    Diese Angaben beziehen sich jetzt aber auf die XML Datei. Kann ich darauf auch im Programm zugreifen??

  • Ich bräuchte quasie folgenden Text in Java und nicht in der ordner Struktur:

    Java
    res/layout/main_activity.xml           # For handsets (smaller than 600dp available width)
    res/layout-sw600dp/main_activity.xml   # For 7” tablets (600dp wide and bigger)
    res/layout-sw720dp/main_activity.xml   # For 10” tablets (720dp wide and bigger)
  • In der Android-Doku wird folgendes zu den Mindestgrößen der verschiedenen vorgefertigten Bildschirmgrößen genannt:

    • xlarge screens are at least 960dp x 720dp
    • large screens are at least 640dp x 480dp
    • normal screens are at least 470dp x 320dp
    • small screens are at least 426dp x 320dp


    Du braucht wahrscheinlich die Angaben, die dir DisplayMetrics liefert, oder??


    Mit den Parametern und ein bisschen rumrechnen hast du dann die Bedingungen für dein if und kannst deine Activities starten.

  • Mit den Parametern und ein bisschen rumrechnen hast du dann die Bedingungen für dein if und kannst deine Activities starten.


    OK, dass rumrechnen:

    Java
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int met= metrics.widthPixels;


    Das Ergebniss:

    Java
    metrics=DisplayMetrics{density=1.0, width=320, height=480, scaledDensity=1.0, xdpi=160.0, ydpi=160.0}
    met=320


    Jetzt kann ich einen dieser Werte für die IF schleife nehmen. Welchen würdest du mir empfehlen?


    public float density The logical density of the display.
    public int densityDpi The screen density expressed as dots-per-inch.
    public int heightPixels The absolute height of the display in pixels.
    public float scaledDensity A scaling factor for fonts displayed on the display.
    public int widthPixels The absolute width of the display in pixels.
    public float xdpi The exact physical pixels per inch of the screen in the X dimension.
    public float ydpi The exact physical pixels per inch of the screen in the Y dimension.


    Ich glaube widthPixels ist dass beste, oder ?

  • Kommt drauf an - nicht umsonst liefert Android alle möglichen Parameter, je nach Anwendung braucht mal diese und mal jene.


    Beispiel: ein hochauflösendes Smartphone-Display (die Konkurrenz arbeitet mit 326 ppi auf 3,5 Zoll und hat 960 × 640 Pixel) hat mehr Pixel als ein billiges Tablet mit DIN-A-4-Fläche. Wenn du schöne Bilder hast, dann lohnt sich die reale Pixel-Auflösung.


    Aber versuch mal, Schrift in der Größe zu lesen - wenn es also auf Details ankommt, dann musst du in so einem Fall alles doppelt so groß machen, damit man was sehen kann...


    Es ist deine Entscheidung und hängt ganz von deinem Anwendungsfall ab.


    Aber denke auch an ältere Leute wie mich, die beim Lesen kleiner Schriften Probleme haben. :*

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!