2012-11-16 2 views
2

안드로이드에서는 기본 CalendarView를 사용하고 있습니다. 배경을 밝은 회색으로 설정했습니다. 캘린더보기의 월보기 색상을 변경할 수 있습니까?캘린더보기 월 이름의 텍스트 색상을 설정하십시오.

+0

나는 캘린더 뷰의 소스 코드를 살펴 봤는데 거기에 texview mMonthTextView ..가 있다는 것을 알았지 만 외부에서는 접근 할 수 없다. 그래서 텍스트 뷰의 텍스트 색을 설정할 방법이 없다. –

+0

wjat about wjat 스타일? 매니페스트에 설정할 수 있습니다. – Merlin

답변

11

알다시피 TextView는 비공개이며 액세스 할 수있는 방법이없는 것처럼 보입니다.

나는 그것을 권하고 싶지 않다 있지만이이 java.lang.reflect 패키지를 사용하여 수행 할 수 있습니다 (너무 이전 버전에서 작동) 나는 다음과 같은 솔루션을 사용하고 안드로이드 5.x의에

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(); 
    } 
+0

감사합니다. Ryan! 당신은 절대적으로 정확합니다 ... –

+0

@ 라이언 나는 맨 위에 나타나는 달의 이름을 바꾸고 싶습니다. 그리고 나는이 방법으로 그것을 할 수 있습니다. 그러나 캘린더보기를 위나 아래로 스크롤 할 때마다 날짜가 다시 정상으로 변경됩니다. 어떤 힌트? – tony9099

+0

@ tony9099 안타깝게도 그렇게하는 간단한 방법은 없습니다. CalendarView 코드는 [grepcode.com] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/widget)에서 볼 수 있습니다. /CalendarView.java). 'setMonthDisplayed'는 TextView를 갱신하기 위해 호출되는 메소드입니다. – Ryan

5

을 :

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의 레이아웃은 here이며, 월 이름 TextView가 레이아웃의 첫 번째 하위 항목임을 알 수 있습니다.

관련 문제