我在项目中使用CalendarView,因此需要为其进行特殊设计。我可以更改CalendarView中所有内容的颜色,但不能更改日历顶部的月份颜色。我尝试了xml中的所有属性。如何更改月份倾斜度和箭头的颜色?
1/m
<CalendarView
android:id="@+id/calendarID"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="Heh"
android:maxDate="31/12/2018"
android:minDate="09/01/2012"
android:showWeekNumber="false"
android:focusedMonthDateColor="@android:style/TextAppearance.Small"
android:background="#004366"
android:unfocusedMonthDateColor="@android:style/TextAppearance.Small"
android:dateTextAppearance="@android:style/TextAppearance.Small"
android:weekDayTextAppearance="@android:style/TextAppearance.Small"
android:weekSeparatorLineColor="@android:style/TextAppearance.Small"
android:selectedWeekBackgroundColor="@android:style/TextAppearance.Small"
/>
答案 0 :(得分:2)
在styles.xml
中已定义以下内容:
<style name="CustomCalendarMonth" parent="AppTheme">
<item name="android:textColorPrimary">@color/orange</item>
</style>
<style name="CustomCalendarDay" parent="TextAppearance.MaterialComponents.Caption">
<item name="android:textColor">@color/green</item>
</style>
<style name="CustomCalendarWeek" parent="TextAppearance.MaterialComponents.Caption">
<item name="android:textColor">@color/purple</item>
</style>
然后输入xml:
<CalendarView
android:theme="@style/CustomCalendarMonth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:dateTextAppearance="@style/CustomCalendarDay"
android:weekDayTextAppearance="@style/CustomCalendarWeek" />
这将是输出:
答案 1 :(得分:0)
检查此代码@Valentin。可能会帮到您。您可以通过单击侧面按钮来更改月份。
我使用了这个库:
implementation 'com.github.sundeepk:compact-calendar-view:1.9.1'
Calendar.xml
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:theme="@style/AppTheme">
<ImageView
android:id="@+id/image_back"
android:layout_width="30dp"
android:layout_height="20dp"
android:layout_marginLeft="20dp"
android:src="@drawable/ic_arrow_back_black_24dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="Calendar"
android:textColor="@android:color/white"
android:textSize="17dp"
android:textStyle="bold" />
<TextView
android:id="@+id/text_today"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|right"
android:padding="10dp"
android:text="Today"
android:textColor="@android:color/white"
android:textSize="15dp" />
</android.support.v7.widget.Toolbar>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_margin="10dp"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/layout_right"
android:layout_width="40dp"
android:layout_height="match_parent"
android:gravity="center">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:background="@mipmap/ic_launcher" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Date"
android:textColor="@color/red_shade_dashboard"
android:textSize="17dp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:id="@+id/layout_left"
android:layout_width="40dp"
android:layout_height="match_parent"
android:gravity="center">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:background="@mipmap/ic_launcher" />
</LinearLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/red_shade_dashboard" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.2">
<com.github.sundeepk.compactcalendarview.CompactCalendarView
android:id="@+id/compactcalendar_view"
android:layout_width="match_parent"
android:layout_height="320dp"
android:layout_margin="5dp"
app:compactCalendarBackgroundColor="@android:color/white"
app:compactCalendarCurrentDayBackgroundColor="@color/red_shade_dashboard"
app:compactCalendarCurrentSelectedDayBackgroundColor="@color/red_shade_dashboard"
app:compactCalendarMultiEventIndicatorColor="@color/red_shade_dashboard"
app:compactCalendarTargetHeight="360dp"
app:compactCalendarTextColor="@android:color/black"
app:compactCalendarTextSize="15dp" />
</LinearLayout>
</LinearLayout>
CalendarActivity.java
public class CalenderViewActivity extends AppCompatActivity {
CompactCalendarView compactCalendarView;
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM-yyyy", Locale.getDefault());
private SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
SimpleDateFormat sdf;
TextView tx_date, tx_today;
LinearLayout ly_detail;
LinearLayout ly_left, ly_right;
Calendar myCalendar;
ImageView im_back;
Date c;
SimpleDateFormat df;
String formattedDate;
String[] dates = new String[0];
RecyclerView recyclerView;
TextView tx_item;
String[] day={"10","20","21","25","27"};
String[] month={"10","10","11","11","12"};
String[] year ={"2018","2018","2018","2018","2018"};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calender_view);
init();
calendarlistener();
Setdate();
tx_date.setText(""+formattedDate);
ly_right.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
compactCalendarView.showCalendarWithAnimation();
compactCalendarView.showNextMonth();
}
});
ly_left.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
compactCalendarView.showCalendarWithAnimation();
compactCalendarView.showPreviousMonth();
}
});
tx_today.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(CalenderViewActivity.this, CalenderViewActivity.class);
startActivity(intent);
finish();
}
});
im_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
//variable initialization
public void init() {
compactCalendarView = (CompactCalendarView) findViewById(R.id.compactcalendar_view);
tx_date = (TextView) findViewById(R.id.text);
ly_left = (LinearLayout) findViewById(R.id.layout_left);
ly_right = (LinearLayout) findViewById(R.id.layout_right);
im_back = (ImageView) findViewById(R.id.image_back);
tx_today = (TextView) findViewById(R.id.text_today);
ly_detail = (LinearLayout) findViewById(R.id.layout_detail);
}
//calendar method
public void calendarlistener() {
compactCalendarView.setListener(new CompactCalendarView.CompactCalendarViewListener() {
@Override
public void onDayClick(Date dateClicked) {
if ( DateFormat.format(dateClicked).equals("2018-11-21")){
Toast.makeText(getApplicationContext(),DateFormat.format(dateClicked)+" This day your brother birth day ",Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(getApplicationContext(),DateFormat.format(dateClicked)+" In This day no Events Available",Toast.LENGTH_LONG).show();
}
}
@Override
public void onMonthScroll(Date firstDayOfNewMonth) {
compactCalendarView.removeAllEvents();
Setdate();
tx_date.setText(simpleDateFormat.format(firstDayOfNewMonth));
}
});
}
//get current date
public void Setdate() {
c = Calendar.getInstance().getTime();
df = new SimpleDateFormat("yyyy-MM-dd");
formattedDate = df.format(c);
compactCalendarView.setUseThreeLetterAbbreviation(true);
sdf = new SimpleDateFormat("MMMM yyyy");
myCalendar = Calendar.getInstance();
for (int j = 0; j < month.length; j++) {
int mon = Integer.parseInt(month[j]);
myCalendar.set(Calendar.YEAR, Integer.parseInt(year[j]));
myCalendar.set(Calendar.MONTH, mon - 1);
myCalendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day[j]));
Event event = new Event(Color.RED, myCalendar.getTimeInMillis(), "test");
compactCalendarView.addEvent(event);
}
}