5

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

4

2 回答 2

12

正如您所发现的,TextView 是私有的,似乎没有任何方法可以访问它。

虽然我不推荐它,但您可以使用以下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();
    }
于 2012-11-29T07:43:26.460 回答
6

在 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));
}

calendarview 的布局可以在这里找到,并且基于月份名称 TextView 是布局中的第一个子级。

于 2015-04-15T09:55:14.833 回答