wake-up-neo.com

Androides Standarddesign

Ich mache eine Android-Anwendung, habe aber über Themen nachgedacht.

Wenn ich kein Theme meiner Android-Anwendung deklariere, welches Theme wird verwendet? Wo finde ich diese Informationen? Was sind die Kriterien für die Verwendung des einen und des anderen?

Ich habe darüber nachgedacht, wenn ich meine gesamte Anwendung anpassen möchte, muss ich ein Thema und alle Elemente erweitern, die ich anpassen möchte.

Und was ist, wenn davon einer als Standard angenommen wird? Wetter muss ich es nochmal anpassen? Woher weiß ich, was die Standardeinstellung ist?

15
user1851366

Das Standarddesign variiert je nach API-Ebene (um mit der allgemeinen Benutzeroberfläche konsistent zu sein).

Auf API <10 bestand das Design aus einer Reihe von Stilen (wie im Link unten), die als Theme bezeichnet wurde. Oberhalb von API 10 war das Standarddesign Theme_Holo. Jetzt wurde das Standarddesign mit API 21 Theme.Material.

Die meisten dieser Stile sind über die Android.support-Bibliotheken verfügbar.

PS: AFAIK Das Lichtthema war immer das Standardthema.

16
shkschneider

Es ist am besten, ein Standarddesign selbst zu definieren, anstatt sich auf Android zu verlassen, um das Standarddesign auszuwählen. Dies liegt daran, dass verschiedene Versionen von Android möglicherweise völlig unterschiedliche Standarddesigns haben und Ihre Layouts durcheinander bringen können.

Sie können ein Design für Ihre Anwendung in AndroidManifest.xml deklarieren.

<application Android:theme="@style/MyTheme" .....>

Dann bearbeiten/fügen Sie im Ordner res/values eine Datei themes.xml hinzu und fügen Folgendes hinzu:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <style name="MyTheme" parent="@Android:style/Theme.Holo">
         ... customize your theme here
    </style>
</resources>

Sie können die parent Ihres Designs beliebig bearbeiten ...

Sie können @Android:style/Theme.Holo auch direkt in AndroidManifest.xml verwenden, wenn Sie keine any-Anpassung wünschen.

Verwenden Sie Theme.AppCompat.Holo, wenn die API-Version unter 11 liegt

4
Populus

Das Standarddesign für App ist in Resources.Java implementieren.

    /**
 * Returns the most appropriate default theme for the specified target SDK version.
 * <ul>
 * <li>Below API 11: Gingerbread
 * <li>APIs 11 thru 14: Holo
 * <li>APIs 14 thru XX: Device default dark
 * <li>API XX and above: Device default light with dark action bar
 * </ul>
 *
 * @param curTheme The current theme, or 0 if not specified.
 * @param targetSdkVersion The target SDK version.
 * @return A theme resource identifier
 * @hide
 */
public static int selectDefaultTheme(int curTheme, int targetSdkVersion) {
    return selectSystemTheme(curTheme, targetSdkVersion,
            com.Android.internal.R.style.Theme,
            com.Android.internal.R.style.Theme_Holo,
            com.Android.internal.R.style.Theme_DeviceDefault,
            com.Android.internal.R.style.Theme_DeviceDefault_Light_DarkActionBar);
}
/** @hide */
public static int selectSystemTheme(int curTheme, int targetSdkVersion, int orig, int holo,
        int dark, int deviceDefault) {
    if (curTheme != 0) {
        return curTheme;
    }
    if (targetSdkVersion < Build.VERSION_CODES.HONEYCOMB) {
        return orig;
    }
    if (targetSdkVersion < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        return holo;
    }
    if (targetSdkVersion < Build.VERSION_CODES.CUR_DEVELOPMENT) {
        return dark;
    }
    return deviceDefault;
}

Dies hängt von der API-Ebene ab. Daher sollten Sie in AndroidManifest.xml Ihre eigene AppTheme definieren, um das Theme in allen API-Level-Geräten zu gewährleisten.

Pls beziehen sich auf die vorige Antwort.

0
Thomas Liu