Как изменить цвет строки в цветовой ресурс? - PullRequest
0 голосов
/ 30 октября 2018

Я хочу изменить цвет фона заголовка, и я использую библиотеку MaterialDrawer:

   AccountHeader headerResult = new AccountHeaderBuilder()
            .withActivity(this)                   
  .withHeaderBackground(Color.parseColor(mPrefs.getString("theme_color",getResources().getString(R.string.default_color)))
  .withSelectionListEnabledForSingleProfile(false)
            ... and so on 

Но с фоном заголовка я получил сообщение об ошибке " Ожидается идентификатор ресурса цвета (R.color.), Но получено целое число RGB " и не удается установить цвет фона, считываемый из предпочтений. Ошибка в журнале: « android.content.res.Resources $ NotFoundException: идентификатор ресурса # 0x2e60e8 »

Ответы [ 6 ]

0 голосов
/ 30 октября 2018

Вы можете сделать это в два этапа

Допустим, у вас есть цвет # 8080000

1. Сначала преобразуйте свой гекс в int

int yourColor = Color.parseColor("#808000");

2. Установить фон

.setBackgroundColor(context.getColor(yourColor));
0 голосов
/ 30 октября 2018

Подпись withHeaderBackground(), которую вы используете, такова:

public AccountHeaderBuilder withHeaderBackground(@DrawableRes int headerBackgroundRes)

но вы передаете int значение какого-то цвета.
Вам нужен цвет или нарисованный идентификатор ресурса.

0 голосов
/ 30 октября 2018

Color.parseColor() парсит строку цвета и возвращает соответствующий color-int , это значение int отличается от ID ресурса , даже два значения также int типа.

Вы можете сделать так:

int colorID =
    getResourceID("your_color_name", "color", getApplicationContext());

Нет необходимости использовать Color.parseColor() метод.

0 голосов
/ 30 октября 2018

Во-первых, вы должны упомянуть в вопросе, что вы используете библиотеку MaterialDrawer , поскольку AccountHeader не является частью стандартного Android SDK.

Тем не менее, изучение источника AccountHeaderBuilder в репо показывает, что есть 3 варианта метода withHeaderBackground, которые принимают Drawable, @DrawableRes int и ImageHolder соответственно.

Если вы настаиваете на загрузке цвета из strings.xml, то я думаю, что будет работать следующий метод:

Создайте ColorDrawable, используя вашу строку, которая должна быть отформатирована как 0xAARRGGBB

Поскольку класс ColorDrawable расширяет Drawable, он должен быть допустимым аргументом для метода withHeaderBackground. Ваш код будет выглядеть так:

ColorDrawable cd = new ColorDrawable(getResources().getString(R.string.default_color));

AccountHeader headerResult = new AccountHeaderBuilder()
            .withActivity(this)                   
  .withHeaderBackground(cd)
  .withSelectionListEnabledForSingleProfile(false)
            ... and so on 

Более простым способом было бы просто иметь ресурс drawable и использовать его вместо R.drawable.default_drawable.

0 голосов
/ 30 октября 2018

Creat ColorDrawable из вашей строки, и вы можете установить его в свой заголовок

int col = Color.parseColor(mPrefs.getString("theme_color",getResources().getString(R.string.default_color)));
ColorDrawable cd = new ColorDrawable();
cd.setColor(col);

headerResult = new AccountHeaderBuilder()
            .withActivity(this)
            .withCompactStyle(false)
            .withHeaderBackground(cd)
            .withSavedInstance(savedInstanceState)
            .build();
0 голосов
/ 30 октября 2018

Сохраните код цвета HEX в colors.xml следующим образом: #AABBEE (используйте шестнадцатеричный код цвета здесь) Затем установите фон:

  .withHeaderBackground(R.color.myColor)
  .withSelectionListEnabledForSingleProfile(false)
  ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...