如何创建自定义主题并在Android应用程序中使用它

时间:2010-09-21 09:28:26

标签: android themes

如何创建自定义主题并在代码中使用它?在菜单中如何实现主题选项并申请活动?

任何想法?

3 个答案:

答案 0 :(得分:13)

Android开发者网站上有一个很好的Styles and Themes guide。基本上你需要做的是

  1. Define a style(或继承内置的)。定义样式
  2.   

    将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非常有用,因此更容易识别这些样式的用途。

    1. Apply已定义的样式到您想要的活动或视图 程式化。你可以

      • 在清单文件中设置活动/应用程序主题:

      <activity android:theme="@style/Theme.MyGreenTheme"/>

      • 或动态设置 - 使用Activity类的相应setter - setTheme()

答案 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);
}