我正在制作一个Android应用程序,但我正在考虑主题..
如果我没有声明我的Android应用程序的主题将使用哪个主题? 我在哪里可以找到这些信息? 使用其中一个的标准是什么?
我在考虑,如果我想自定义我的所有应用程序,我必须扩展一个主题并自定义我想要自定义的所有项目。
如果它假设其中一个是默认的呢?天气我要再次定制吗?我怎么知道默认的是什么?
答案 0 :(得分:16)
默认主题取决于API级别(与常规UI一致)。
On API< 10,主题是一组样式(如下面的链接),称为Theme
,在API 10上方,默认主题为Theme_Holo
,现在,从API 21开始,默认主题为成为Theme.Material
。
Theme
或Theme.AppCompat
Holo_Theme
或Theme.AppCompat
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级别设备中的主题。
请参考之前的答案。