Android默认主题

时间:2014-12-03 16:42:20

标签: android android-theme

我正在制作一个Android应用程序,但我正在考虑主题..

如果我没有声明我的Android应用程序的主题将使用哪个主题? 我在哪里可以找到这些信息? 使用其中一个的标准是什么?

我在考虑,如果我想自定义我的所有应用程序,我必须扩展一个主题并自定义我想要自定义的所有项目。

如果它假设其中一个是默认的呢?天气我要再次定制吗?我怎么知道默认的是什么?

3 个答案:

答案 0 :(得分:16)

默认主题取决于API级别(与常规UI一致)。

On API< 10,主题是一组样式(如下面的链接),称为Theme,在API 10上方,默认主题为Theme_Holo,现在,从API 21开始,默认主题为成为Theme.Material

大多数样式都可以通过android.support库获得。

PS: AFAIK灯光主题一直是默认主题。

答案 1 :(得分:4)

最好自己定义一个默认主题,而不是依靠android来选择默认主题。这是因为不同版本的android 可能具有完全不同的默认主题,并且可能会弄乱您的布局。

您可以在AndroidManifest.xml

中为申请表示主题
<application android:theme="@style/MyTheme" .....>

然后在res/values文件夹中编辑/添加文件themes.xml并添加如下内容:

<?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>

您可以将主题的parent编辑为您想要的任何内容......

如果您根本不想任何自定义,也可以直接在@android:style/Theme.Holo中使用AndroidManifest.xml

如果API版本低于11

,请使用Theme.AppCompat.Holo

答案 2 :(得分:0)

App的默认主题是在Resources.java中实现的!

    /**
 * 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;
}

根据API级别的不同而不同,因此您最好在AndroidManifest.xml中定义自己的AppTheme,以确保所有API级别设备中的主题。

请参考之前的答案。