garretyoder / Colorful

Android runtime theme library
Apache License 2.0
2.13k stars 193 forks source link

Use custom color #30

Closed tcqq closed 6 years ago

tcqq commented 6 years ago

How to set custom color codes for Accent and Primary colors, such as#FFFFFF?

If not support now, can you add a method to set the color code for Primary and Accent? This is useful, thanks.

garretyoder commented 6 years ago

FFFFFF is already in the library, that's ThemeColor.WHITE.

Support for what you're imagining (setPrimaryColor(hexColor: String) will never come because of the way colorful is built. Colorful uses Android's native style engine, which uses styles. Styles are a immutable object that cannot be created or modified at runtime.

However, a future planned feature is to allow users to define additional colors via user-provided style files.

See issue #23

tcqq commented 6 years ago

I know Colorful all colors are through styles to get now, these colors can be used as the default color, But style can only meet few users, color can satisfy all users, So you can add a method like this, setPrimaryColor(hexColor: String okay?

garretyoder commented 6 years ago

Reread what I said above please. Setting a arbitrary hex color will never happen because of how Android's styles work. However, being able to define additional styles that have custom colors will come soon.

tcqq commented 6 years ago

Check this library

Aesthetic.get()
    .colorPrimaryRes(R.color.md_indigo)
    .colorPrimaryDarkRes(R.color.md_indigo_dark)
    .colorAccentRes(R.color.md_yellow)
    .apply();
garretyoder commented 6 years ago

This library is archetected completely differently than colorful. Asthetic is the successor to ATE, a library I used to do work on. Asthetic overrides the view inflator and manually styles views. Colorful merges styles together and let's Android do it. Both approaches have their merits, Asthetic can be more flexible but is incredibly complex and has a high overhead. Colorful is a bit more restricted but is light and fast.

As I said, this feature will come soon, just in a different format. You will be able to define your own style file that contains whatever color you want and have colorful merge it.

tcqq commented 6 years ago

But if this application allows users to pass custom color codes, style does not solve the problem.:sob:

garretyoder commented 6 years ago

If you want to provide the user with a hex color picker for theme color, then I'd recommend you use a library like Asthetic and deal with the overhead. If you just want to add additional colors to colorful's pallet, that will come soon.

This is simply a limitation of the Android platform. I've been asking for mutable style objects for a long time.

tcqq commented 6 years ago

Okay thank you.

tcqq commented 6 years ago

@garretyoder Aesthetic has many problems and it is costly to maintain, If Colorful supports setting primary and accent colors programmatically, it will be perfect. image image

garretyoder commented 6 years ago

As I said, due to the fact that Colorful uses Android's native style engine, this is impossible and will not happen until such a time when Google allows mutable style objects.

I'd advise you to take a step back and ask do you really need to present your users with a hex color picker? I've found that most are more than happy with the material color pallet, which is why I wrote colorful.

tcqq commented 6 years ago

I think you are right.