How to create a custom theme and use it in an Android application?

后端 未结 3 1361
甜味超标
甜味超标 2021-02-01 07:52

How to create a custom themes and use it in the code?

In menu how to implement theme option and apply for the activity?

3条回答
  •  迷失自我
    2021-02-01 08:16

    Create Custome Views:

    public class CustomTextView extends 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);
    }
    

提交回复
热议问题