Цвет фона CardView не тот, который я установил - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь создать RecyclerView с CardView элементами, каждый из которых имеет свой цвет.Я использую адаптер и передаю ресурс для цвета.

Проблема в том, что мои элементы вместо того, чтобы иметь цвет, которым я передал (например: красный, синий или зеленый), имеют разные оттенки фиолетового.

Если я использую тот жекод для дочернего Relative Layout, цвета работают отлично, но они не заполняют всю карточку.

Это элемент списка:

<android.support.v7.widget.CardView
    android:id="@+id/rl_main_list_background_color"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:cardCornerRadius="16dp"
    android:layout_marginBottom="8dp">

    <RelativeLayout

        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/tv_main_list_game_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Game"
            android:layout_margin="16dp"
            android:textStyle="bold|italic"
            android:textSize="20sp"/>

    </RelativeLayout>

</android.support.v7.widget.CardView>

Это адаптер

public class GamesListAdapter extends RecyclerView.Adapter<GamesListAdapter.GamesViewHolder> {

    private ArrayList<GameItem> mGamesList;


    public static class GamesViewHolder extends RecyclerView.ViewHolder{
        public TextView mGameName;
        public CardView mItemRelativeLayour;

        public GamesViewHolder(@NonNull View itemView) {
            super(itemView);
            mGameName = itemView.findViewById(R.id.tv_main_list_game_name);
            mItemRelativeLayour = itemView.findViewById(R.id.rl_main_list_background_color);
        }
    }

    public GamesListAdapter(ArrayList<GameItem> gamesList){ mGamesList = gamesList;}


    @NonNull
    @Override
    public GamesViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.main_list_list_element, viewGroup, false);
        GamesViewHolder gamesViewHolder = new GamesViewHolder(view);
        return gamesViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull GamesViewHolder gamesViewHolder, int i) {
            GameItem currentItem = mGamesList.get(i);

            gamesViewHolder.mGameName.setText(currentItem.getGameName());
            gamesViewHolder.mItemRelativeLayour.setCardBackgroundColor(currentItem.getBackgroundColor());
    }

    @Override
    public int getItemCount() {
        return mGamesList.size();
    }

}

И вот как я заполняю список

gamesList = new ArrayList<>();
gamesList.add(new GameItem("Truth or Dare", R.color.truthOrDareColor));
gamesList.add(new GameItem("Kings", R.color.kingsColor));
gamesList.add(new GameItem("Flip the card(Urmatoarea Carte)", R.color.flipTheCardColor));
gamesList.add(new GameItem("Most likely to", R.color.mostLikelyToColor));
gamesList.add(new GameItem("Spin the bottle", R.color.spinTheBottleColor));
gamesList.add(new GameItem("I have sex like", R.color.iHaveSexLikeColor));
gamesList.add(new GameItem("Never have I ever", R.color.neverHaveIEverColor));

Есть идеи, как это исправить?Спасибо!

1 Ответ

0 голосов
/ 28 февраля 2019

Изменить,

gamesViewHolder.mItemRelativeLayour.setCardBackgroundColor(currentItem.getBackgroundColor());

Кому,

gamesViewHolder.mItemRelativeLayour.setCardBackgroundColor(
          ContextCompat.getColor(context, currentItem.getBackgroundColor()));

Вы устанавливаете Interger ID как цвет R.color.some_color просто хранит ссылку на ваш цвет, вы должны получить фактический цвет оттот идентификатор.

Чтобы получить цвет из ссылочного идентификатора, вы должны использовать следующее:

ContextCompat.getColor(context, R.color.some_color);

Happy Coding.

...