#android #android-recyclerview #selector
#Android #android-recyclerview #селектор
Вопрос:
Мне нужно сделать селектор дня, как на скриншоте ниже.
Проблема в раскраске чисел. Мне нужны белые числа, пока они находятся в круге.
Я решил сделать это с помощью 2 recyclerview, которые синхронизированы друг с другом. В одном recyclerview элементы черного цвета, а в другом — белого.
Но нет способа объединить их вместе, чтобы получить желаемый результат. Пожалуйста, дайте мне представление о правильной реализации этого.
Если бы можно было придать виду recyclerview форму круга, это решило бы мою проблему. Но, похоже, у recyclerview нет этой функции.
Ответ №1:
Да, вы можете придать элементам представления recycler форму круга, выполнив следующие шаги 1: Создайте framelayout 2: Поместите cardview внутри него. 3. Добавьте приложение: cardCornerRadius =»150dp» в режиме просмотра карты. 4: Добавьте textview внутрь
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="4dp"
>
<androidx.cardview.widget.CardView
android:padding="10dp"
android:layout_margin="1dp"
android:id="@ id/crd"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cardCornerRadius="150dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:text="4"
android:textColor="#000"
android:gravity="center"
android:layout_centerVertical="true"
android:id="@ id/colorBox"
/>
</androidx.cardview.widget.CardView>
</FrameLayout>
вывод хотел бы b: Вывод
Комментарии:
1. Я знаю способ придать элементу переработчика форму круга. Но мне интересно, возможно ли придать форму круга всему reyclerview.
Ответ №2:
используйте Model для RecyclerView и обрабатывайте состояние внутри него. внесите одно логическое значение в модель, и если выбрана дата, сделайте ее истинной, иначе сделайте ее ложной и уведомите адаптер. Внутри адаптера, если флаг имеет значение true, сделайте текстовое поле даты белым, а остальное черным
class Model {
String date;
boolean isSelected;
//....
public boolean isSelected(){
return isSelected;
}
public void setSelected(boolean isSelected){
this.isSelected = isSelected;
}
}
внутри onBindViewHolder()
адаптера
if (modelList.get(position).isSelected())
holder.textBoxDate.setTextColor(ContextCompat.getColor(context, R.color.white));
else
holder.textBoxDate.setTextColor(ContextCompat.getColor(context, R.color.black));
для получения дополнительной информации в Google «как управлять выбранным состоянием в recyclerview Android»
Комментарии:
1. Это было бы слишком просто. Мне нужна частичная раскраска символов. Как вы можете видеть на втором скриншоте, часть символа «2» серая внутри круга, а другая часть символа «2» черная за пределами круга.