Позвольте пользователю установить светлую или темную тему плюс цветовой акцент - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь создать настройки для приложения, и я хочу сделать его настраиваемым, позволяя пользователю выбирать между светлой и темной темой.Я уже сделал это https://www.hidroh.com/2015/02/16/support-multiple-themes-android-app/ после этого урока.

Проблема в том, что я хочу выбрать другой вариант выбора цвета акцента, как это делают многие приложения.Как я могу достичь этого независимо от темноты / света?Есть ли способ избежать перезапуска активности?

1 Ответ

0 голосов
/ 26 мая 2018

Подход, который я использовал, заключается в том, чтобы сохранить ваши цвета в массиве и позволить пользователям выбирать цвет и сохранять индекс выбранного цвета в настройках.Таким образом, один раз, когда упражнение загружается, прочитайте сохраненный цвет и установите цвет соответственно

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(ContextCompat.getColor(this,colors.getResourceId(chapter_key-1, 0)));
    }

main screen where they select the book

package com.**********.app.customViews;

/**
 * Created by pakistantechhouse on 18/02/2017.
 */

import android.content.Context;
import android.graphics.Canvas;
import android.support.v4.content.ContextCompat;
import android.util.AttributeSet;
import android.widget.RelativeLayout;

import com.**********.app.R;


public class CRelativeLayout extends RelativeLayout {


    public CRelativeLayout(Context context) {
        super(context);
        if (!isInEditMode()) {
            //TODO get your color here from the preferences and apply to the view
            this.setBackgroundColor(ContextCompat.getColor(context, R.color.colorPrimary));
        }
    }

    public CRelativeLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        if (!isInEditMode()) {
            //TODO get your color here from the preferences and apply to the view 
            this.setBackgroundColor(ContextCompat.getColor(context, R.color.colorPrimary));

        }
    }

    public CRelativeLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        if (!isInEditMode()) {
            //TODO get your color here from the preferences and apply to the view 

            this.setBackgroundColor(ContextCompat.getColor(context, R.color.colorPrimary));
        }
    }

    protected void onDraw (Canvas canvas) {
        super.onDraw(canvas);

    }

}
...