web-dev-qa-db-fra.com

comment créer un thème personnalisé et l'utiliser dans une application Android

Comment créer un thème personnalisé et l'utiliser dans le code? dans le menu comment implémenter l'option de thème et postuler à l'activité?

des idées ?

15
user428231

Il existe un guide Nice Styles and Themes sur le site des développeurs Android. Fondamentalement, ce que vous devez faire est

  1. Définir un style (ou en hériter un intégré). Définir un style

enregistrer un fichier XML dans le répertoire res/values/ de votre projet. Le Le nom du fichier XML est arbitraire, mais il doit utiliser l'extension .xml et être enregistré dans le dossier res/values/.

Le nœud racine du fichier XML doit être <resources>.

Pour chaque style que vous souhaitez créer, ajoutez un élément au fichier avec un nom qui identifie de manière unique le style (cet attribut est requis).

c'est à dire.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.MyGreenTheme" parent="Theme.Light">
        <item name="Android:windowBackground">#11aa22</item>
    </style>
</resources>

Il est utile de nommer le fichier de ressources themes.xml afin de mieux reconnaître l'utilisation de ces styles.

  1. Appliquez le style défini à l'activité ou à la vue souhaitée Stylisée. Tu peux soit

    • définissez le thème Activité/Application dans le fichier manifeste:

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

    • ou définissez-le de manière dynamique - utilisez l'outil de définition correspondant de la classe d'activité - setTheme () .
13
stan0

This est le site parfait qui crée tous les fichiers nécessaires pour créer une interface utilisateur personnalisée. Je l'ai utilisé personnellement il y a quelques semaines et cela a très bien fonctionné pour moi.

Je n'ai aucune affiliation avec ce site mais je l'ai trouvé très intéressant . J'espère que cela pourra vous aider :)

3
Michele La Ferla

Créer des vues personnalisées:

classe publique CustomTextView extend 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);
}
0
Kushaal Singla