Как создать собственную тему и использовать ее в приложении для Android?

Как создать собственные темы и использовать их в коде?

В меню как реализовать опцию темы и подать заявку на занятие?

Ответы

Ответ 1

Там есть хороший Руководство по стилям и темам на сайте разработчиков Android. В основном вам нужно сделать

сохранить XML файл в каталоге res/values/ вашего проекта. имя файла XML произвольно, но оно должно использовать расширение .xmlи сохраняться в папке res/values/.

Корневой файл node файла 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/Application в файле манифеста:

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

    • или установите его динамически - используйте соответствующий установщик класса Activity - setTheme().

Ответ 2

Это - идеальный сайт, который создает все необходимые файлы, необходимые для создания пользовательского интерфейса. Я использовал его лично пару недель назад, и он отлично поработал у меня.

У меня нет связи с этим сайтом, но это очень интересно. Надеюсь, это может вам помочь:)

Ответ 3

Создать пользовательские представления:

открытый класс 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);
}