如何创建自定义主题并在代码中使用它?在菜单中如何实现主题选项并申请活动?
任何想法?
答案 0 :(得分:13)
Android开发者网站上有一个很好的Styles and Themes guide。基本上你需要做的是
将XML文件保存在项目的
res/values/
目录中。该 XML文件的名称是任意的,但必须使用.xml
扩展名 并保存在res/values/
文件夹中。XML文件的根节点必须是
<resources>
。对于您要创建的每种样式,请向文件添加元素 使用唯一标识样式的名称(此属性为 必需的)。
即
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.MyGreenTheme" parent="Theme.Light">
<item name="android:windowBackground">#11aa22</item>
</style>
</resources>
命名资源文件themes.xml
非常有用,因此更容易识别这些样式的用途。
Apply已定义的样式到您想要的活动或视图 程式化。你可以
<activity android:theme="@style/Theme.MyGreenTheme"/>
答案 1 :(得分:3)
This是完美的网站,可以创建制作自定义用户界面所需的所有必要文件。我几个星期前亲自使用它,它对我很有用。
我与此网站没有任何关系,但发现它非常有趣。 希望这可以帮助你:)
答案 2 :(得分:0)
创建自定义视图:
公共类CustomTextView扩展了AppCompatTextView {
public CustomTextView(Context context) {
super(context);
setCommonChanges(DefaultTheme.getInstance().textColor, true, context);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setDefaultValues(context, attrs);
}
public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setDefaultValues(context, attrs);
}
private void setDefaultValues(Context context, AttributeSet attrs) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomTextView);
final int N = a.getIndexCount();
int color = DefaultTheme.getInstance().textColor;
boolean isCustomFont = a.getBoolean(R.styleable.CustomTextView_isCustomFont, true);
for (int i = 0; i < N; ++i) {
int colorIndex = a.getInteger(R.styleable.CustomTextView_tvBackground, 2);
switch (colorIndex) {
case 1:
color = DefaultTheme.getInstance().headingTextColor;
break;
case 2:
color = DefaultTheme.getInstance().textColor;
break;
case 3:
color = DefaultTheme.getInstance().textHintColor;
break;
case 4:
color = DesignUtils.getColorIdFromHexCode("#FFFFFF");
break;
case 5:
color = DefaultTheme.getInstance().iconColor;
break;
case 6:
color = DefaultTheme.getInstance().menuHeaderTextColor;
break;
case 7:
color = DefaultTheme.getInstance().menuTextColor;
break;
case 8:
color = DefaultTheme.getInstance().keyboardtextcolor;
break;
case 9:
color = DesignUtils.getColorIdFromHexCode("#BEBEBE");
break;
}
}
a.recycle();
setCommonChanges(color, isCustomFont, context);
}
private void setCommonChanges(int color, boolean isCustomFont, Context context) {
if (isCustomFont) {
Typeface typeface = DefaultTheme.getInstance().getTVFont(context);
setTypeface(typeface, getTypeface().getStyle());
}
setTextColor(color);
}
public void updateTypeFace(int style){
Typeface typeface = DefaultTheme.getInstance().getTVFont(getContext());
setTypeface(typeface, style);
}