Java 设置日历视图月份名称的文本颜色

Java 设置日历视图月份名称的文本颜色,java,android,Java,Android,在android中,我使用默认的日历视图。 我已将背景设置为浅灰色。但是我可以更改日历视图的月份视图的颜色吗?正如您所发现的,文本视图是私有的,似乎没有任何访问它的方法 尽管我不推荐,但您可以使用java.lang.reflect包来实现这一点: try { CalendarView cv = (CalendarView) this.findViewById(R.id.calendarView1); Class<?> cvClass =

在android中,我使用默认的日历视图。
我已将背景设置为浅灰色。但是我可以更改日历视图的月份视图的颜色吗?

正如您所发现的,文本视图是私有的,似乎没有任何访问它的方法

尽管我不推荐,但您可以使用
java.lang.reflect
包来实现这一点:

    try
    {
        CalendarView cv = (CalendarView) this.findViewById(R.id.calendarView1);
        Class<?> cvClass = cv.getClass();
        Field field = cvClass.getDeclaredField("mMonthName");
        field.setAccessible(true);

        try
        {
            TextView tv = (TextView) field.get(cv);
            tv.setTextColor(Color.RED);
        } 
        catch (IllegalArgumentException e)
        {
            e.printStackTrace();
        }
        catch (IllegalAccessException e)
        {
            e.printStackTrace();
        }
    }
    catch (NoSuchFieldException e)
    {
        e.printStackTrace();
    }
试试看
{
CalendarView cv=(CalendarView)this.findViewById(R.id.calendarView1);
类cvClass=cv.getClass();
Field Field=cvClass.getDeclaredField(“mMonthName”);
字段。setAccessible(true);
尝试
{
TextView tv=(TextView)field.get(cv);
tv.setTextColor(颜色:红色);
} 
捕获(IllegalArgumentException e)
{
e、 printStackTrace();
}
捕获(非法访问例外e)
{
e、 printStackTrace();
}
}
捕获(无此字段例外)
{
e、 printStackTrace();
}

在Android 5.x上,我使用了以下解决方案(它也适用于旧版本):


可以找到calendarview的布局,基于此,月份名称TextView是布局中的第一个子项。

我已经查看了calendarview的源代码,发现有一个texview mMonthTextView。。但是在外面是无法到达的。。所以没有办法设置文本视图的文本颜色..wjat关于样式?也许可以在manifest@Ryan我想更改顶部显示的月份的名称,我可以用这种方法来完成。但是,每当我向上或向下滚动日历视图时,日期都会变回正常。有什么提示吗?@tony9099不幸的是,我没有想到简单的方法。您可以看到CalendarView的代码
setMonthDisplayed
是更新文本视图所调用的方法。@Tim请参阅我的答案,了解Android 5.x的工作解决方案
CalendarView cv = (CalendarView) this.findViewById(R.id.calendarView1);
ViewGroup vg = (ViewGroup) cv.getChildAt(0);
View child = vg.getChildAt(0);

if(child instanceof TextView) {
    ((TextView)child).setTextColor(getResources().getColor(R.color.black));
}