web-dev-qa-db-ja.com

カスタムテーマを作成してAndroidアプリケーションで使用する方法は?

カスタムテーマを作成してコードで使用する方法

メニューでテーマオプションを実装してアクティビティに申請するにはどうすればよいですか?

15
user428231

Android=開発者サイトに素敵な スタイルとテーマのガイド )があります。基本的にあなたがする必要があるのは

  1. スタイルを定義します (または組み込みのスタイルを継承します)。スタイルを定義するには

プロジェクトのres/values/ディレクトリにXMLファイルを保存します。 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. 適用 定義したスタイルを、スタイルを設定するアクティビティまたはビューに適用します。あなたはどちらか

    • マニフェストファイルでアクティビティ/アプリケーションテーマを設定します。

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

    • または動的に設定します-アクティビティクラスの対応するセッターを使用します- setTheme()
13
stan0

This は、カスタムUIを作成するために必要なすべてのファイルを作成する完璧なサイトです。私は数週間前に個人的にそれを使用し、それは私にとってはうまくいきました。

私はこのサイトとは関係ありませんが、それは非常に興味深いと思いました。これがあなたに役立つことを願っています:)

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);
}
0
KKSINGLA