Установить GradientDrawable цвет в адаптере - PullRequest
0 голосов
/ 30 августа 2018

Я получил цвет от фона кнопки и сохранил в виде строки в базе данных. Позже я хочу использовать эту цветную строку в моем адаптере recyclerView, чтобы установить цвет моего TextView. Ниже мой код:

 @Override
public void onBindViewHolder(NoteListAdapter.NoteListHolder holder, int position) {
    current = data.get(position);
    final String text = current.getText();
    final String get_tag_text = current.getTag();
    final String get_tag_color = current.getTag_color();

    int[] colors = {Color.parseColor(get_tag_color)};
    GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors);

    holder.note_text.setText(text);
    holder.tv_tag_text.setBackground(gd);
    holder.tv_tag_text.setText(get_tag_text);
}

Я получил ошибку " Неизвестный цвет ". Сохраненный цветовой формат в базе данных (сохраненный цветовой формат android.graphics.drawable.GradientDrawable@d1790a4)

Ниже приведен код для получения цвета из файла для рисования фона кнопки, а также мой XML-код кнопки

 color  = (GradientDrawable) tag_watchlist.getBackground().mutate();
tag_color= color.toString();

 <Button
        android:id="@+id/tag_watch"
        style="@style/tag_buttons"
        android:background="@drawable/watchlist_button"
        android:text="Watchlist" />

код файла для рисования фона кнопки

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
android:padding="10dp">
<solid android:color="#a40ce1"/>
<corners android:radius="10dp"/>
</shape>

Может кто-нибудь сказать мне, как решить эту проблему ??

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Отредактированный ответ

Вы получаете исключение Caused by: java.lang.IllegalArgumentException: Unknown color означает, что вы не передаете цвет в поддерживаемых форматах методу Color.parseColor.

Убедитесь, что вы передаете значения в следующем формате

#RRGGBB
#AARRGGBB

Вот правильный пример

Color.parseColor("#FF4081")

Для получения дополнительной информации см. Документацию Color.parseColor

Согласно вашему требованию, вы можете достичь этого уровня API 24 и выше. Если вы используете текущую minSdkVersion 24 , попробуйте ниже

Измените класс вашей модели, чтобы сохранить цвет как Integer вместо String.

GradientDrawable gradientDrawable = (GradientDrawable) tag_watchlist.getBackground().mutate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    int color = gradientDrawable.getColor().getDefaultColor();
    Log.d("TAG","Color is :"+color);
    current.setTagColor(color); // where current is your model class
}

Чтобы вернуть цвет от модели

int color = current.getTagColor();
0 голосов
/ 30 августа 2018

Вам необходимо указать как минимум два цвета для GradientDrawable, startColor и endColor

.

Вероятно, будет выдано исключение java.lang.IllegalArgumentException: needs >= 2 number of colors с этим кодом:

int[] colors = {Color.parseColor(get_tag_color)};
    GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors);

Измените свой код следующим образом:

int[] colors = {Color.parseColor(start_color), Color.parseColor(end_color)};
        GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors);

Если у вас есть get_tag_color для обоих из startColor и endColor, тогда замените соответственно, но это не поможет с GradientDrawable.

...