2011-12-27 3 views
1

HorizontalScrollView 끝 부분에 표시등이 나타나 스크롤 내용이 종료되었음을 나타냅니다. 이 색상을 변경하는 방법이 있습니까? 그것은 내 전화에 노란색으로 나타납니다. 나는 이미 내가 원하는 배경으로 HorizontalScrollView의 배경색을 설정했지만,이 "end-of-scroll"표시등은 내가 원하는 것이 아닙니다.HorizontalScrollView의 조명 색상 변경 - OverScrollMode

편집 : (API 레벨 9부터 - this link 참조)이 표시등이 onOverScrollMode으로 표시됩니다. OVER_SCROLL_NEVER를 설정하고 Eclair 버전과의 호환성을 유지할 수있는 방법이 있습니까? 또는 더 나은 :이 빛의 색상을 설정하려면 (나타나는 경우)?

+0

HorizontalScrollView에 ListView가 포함되어 있습니까? – Krylez

+0

아니요. 단지 'LinearLayout'입니다. 그것의 내 애플 리케이션의 톱 메뉴, 안드로이드 뮤직 플레이어 애플 리케이션과 같은 것. – Alesqui

답변

2

아쉽게도 OverScroll EdgeEffect의 색상을 설정하는 간단한 방법은 없습니다.

안전하게 OVER_SCROLL_NEVER를 설정하고 초기 SDK 회전 수와 호환되도록 setOverScrollMode 메소드를 인트로 스 트린 할 수 있으며 발견 된 경우 호출 할 수 있습니다. 이 질문에 이미 답했지만, 난 당신이 overScrollMode 속성 설정에 대한 갈 수있는 더 많은 방법의 몇 가지를 추가하고 싶었

setContentView(R.layout.main); 

    // find scroll view   
    HorizontalScrollView hscroll = (HorizontalScrollView)findViewById(R.id.hscroll); 
    try { 
     // look for setOverScrollMode method 
     Method setOverScroll = hscroll.getClass().getMethod("setOverScrollMode", new Class[] { Integer.TYPE }); 

     if (setOverScroll != null) { 
      try { 
       // if found call it (OVER_SCROLL_NEVER == 2) 
       setOverScroll.invoke(hscroll, 2); 
      } catch (InvocationTargetException ite) {  
      } catch (IllegalAccessException ie) { 
      }    
     } 
     } catch (NoSuchMethodException nsme) {   
    } 
+0

overScroll의 밝은 색상을 변경할 수 없다는 유감스러운 점 ... 코드 덕분에 – Alesqui

+1

색상은 실제로 HorizontalScrollView에서 EdgeEffect로 설정된 드로어 블입니다. 불행히도 클래스의 가장자리 효과 변수는 private이므로 OVER_SCROLL_NEVER를 설정하는 것 이외에 재정의 할 메서드가 없습니다. 그래서 당신은 시스템 테마로 설정되어있는 빛을 얻었고 아직 그것을 대체 할 좋은 방법을 찾지 못했습니다. 내가 뭔가를 더 잘 나타내면 나는 그것을 게시 할 것이다. – slund

+0

고마워요, @스런 드 ... 뭔가 찾으면 알려주세요 =] – Alesqui

1

(3.1 및 2.2에서 테스트).

1) "layout-v10"폴더를 만들고 원하는대로 overScrollMode 속성을 설정하여 대체 xml 레이아웃을 지정하십시오.

2) # 1은 파일과 복제본을 복사하는 것을 의미하는 경우 HorizontalScrollView 스타일을 만들 수 있습니다.

1

리플렉션을 사용하여 EdgeEffect 색상을 설정할 수 있습니다. 다음은 API 14+에서 작동합니다.

public static void setEdgeGlowColor(final HorizontalScrollView hsv, final int color) { 
    try { 
     final Class<?> clazz = HorizontalScrollView.class; 
     for (final String name : new String[] { 
       "mEdgeGlowLeft", "mEdgeGlowRight" 
     }) { 
      final Field field = clazz.getDeclaredField(name); 
      field.setAccessible(true); 
      setEdgeEffectColor((EdgeEffect) field.get(hsv), color); 
     } 
    } catch (final Exception ignored) { 
    } 
} 

public static void setEdgeEffectColor(final EdgeEffect edgeEffect, final int color) { 
    try { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      edgeEffect.setColor(color); 
      return; 
     } 
     final Field edgeField = EdgeEffect.class.getDeclaredField("mEdge"); 
     edgeField.setAccessible(true); 
     final Field glowField = EdgeEffect.class.getDeclaredField("mGlow"); 
     glowField.setAccessible(true); 
     final Drawable mEdge = (Drawable) edgeField.get(edgeEffect); 
     final Drawable mGlow = (Drawable) glowField.get(edgeEffect); 
     mEdge.setColorFilter(color, PorterDuff.Mode.SRC_IN); 
     mGlow.setColorFilter(color, PorterDuff.Mode.SRC_IN); 
     mEdge.setCallback(null); // free up any references 
     mGlow.setCallback(null); // free up any references 
    } catch (final Exception ignored) { 
    } 
}