2012-05-17 3 views
3

약간의 검색을 수행했습니다. TextView에 그림자 레이어를 추가하는 방법을 볼 수 있지만 텍스트의 범위 만 섀도우하게하고 싶습니다. 저는 기본적으로 사용자가 텍스트 선택 스타일을 변경할 수있는 EditText를하고 있습니다. 그 스타일 중 하나는 선택한 색상의 그림자입니다. 색상, 크기, 서체 등의 범위가 있지만 그림자를 찾을 수는 없습니다.Android에서 문자열 쉐도우 스팬을 수행하는 방법은 무엇입니까?

기본적으로 내가 좋아하는 뭔가를하고 싶지 : (주 코드가 모노 이드에서입니다,하지만 자바 대답도 도움이 될 것입니다)

 var N = new ShadowSpan(color,dx,dy,radius); // no such thing? 
     int S = txEdit.SelectionStart; 
     int E = txEdit.SelectionEnd; 
     Str = new SpannableString(txEdit.TextFormatted); 
     Str.SetSpan(N,S,E, SpanTypes.InclusiveInclusive); 
     txEdit.SetText(Str, TextView.BufferType.Spannable); 
     txEdit.SetSelection(S,E); 

어떤 지원이나 제안에 감사드립니다. 내가 android.text.style.CharacterStyle (어쩌면 TextPaint 객체에서 setShadowLayer에 updateDrawState()를 오버라이드)에서 내 자신의 ShadowSpan 구현을 파생시키는 방법을 찾아야하는지 궁금하네요? 아니면 그냥 간단한 대답을 놓치고 있습니까? 나는 이것을하기를 원했던 유일한 사람이 될 수 없다. 그래서 나는 관습을 시도하면서 너무 멀리 가기 전에 물어볼 것이라고 생각했다.

- 편집 -

내가 내 자신의 ShadowSpan을 만드는 시도하고 작동하는 것처럼 보인다. 누군가가 더 나은 해결책을 가지고 있다면 여전히 바닥을 열어두고 있습니다. 뭔가가 이미 존재해야만하는 것처럼 보이지만 너무 많이 할 필요는 없다고 생각합니다. shadowDx, 안드로이드 : shadowDy, 안드로이드 : 여기

내가 안드로이드

에 대한 모노에있는
public class ShadowSpan : Android.Text.Style.CharacterStyle 
{ 
    public float Dx; 
    public float Dy; 
    public float Radius; 
    public Android.Graphics.Color Color; 
    public ShadowSpan(float radius, float dx, float dy, Android.Graphics.Color color) 
    { 
     Radius = radius; Dx = dx; Dy = dy; Color = color; 
    } 

    public override void UpdateDrawState (TextPaint tp) 
    { 
     tp.SetShadowLayer(Radius, Dx, Dy, Color); 
    } 
} 

은 아마 당신은 안드로이드, android:shadowColor 사용을 고려할 것 때문에

void HandleClick (object sender, EventArgs e) 
    { 
     var N = new ShadowSpan(1,1,1,Android.Graphics.Color.Red); 
     int S = txEdit.SelectionStart; 
     int E = txEdit.SelectionEnd; 
     Str = new SpannableString(txEdit.TextFormatted); 
     Str.SetSpan(N,S,E, SpanTypes.InclusiveInclusive); 
     txEdit.SetText(Str, TextView.BufferType.Spannable); 
     txEdit.SetSelection(S,E); 
    } 

답변

7

더 그것에 대해 생각 데 참조가 CharacterStyle에서 파생에 의해 걸쳐 . Google은 일회성 Span 클래스를 사용하여 API를 부풀리기를 원하지 않는다고 생각합니다. 나는 나의 질문을 구성하는 과정에서 나는 대답을 끝내 었다고 생각한다. 글쎄, 잘하면이 누군가 다른 사람 언젠가 도움이됩니다. 제안을 게시 한 모든 사람에게 감사합니다.

public class ShadowSpan : Android.Text.Style.CharacterStyle 
{ 
    public float Dx; 
    public float Dy; 
    public float Radius; 
    public Android.Graphics.Color Color; 
    public ShadowSpan(float radius, float dx, float dy, Android.Graphics.Color color) 
    { 
     Radius = radius; Dx = dx; Dy = dy; Color = color; 
    } 

    public override void UpdateDrawState (TextPaint tp) 
    { 
     tp.SetShadowLayer(Radius, Dx, Dy, Color); 
    } 
} 
0

처럼 사용하는 것입니다 shadowRadius을; 대안 적으로 setShadowLayer().

검사는 텍스트 (그림자 부분을 텍스트로 아래로 스크롤)을 사용자 정의하는 예제가 들어있는 link

는 또한 사용자 정의를 구현하는 매우 간단한데, this one

+0

이 링크를 보았습니다. TextView 전체에 레이어를 설정하지만 텍스트의 하위 선택 만하면됩니다. – CFD

4

저는 자바를 제외하고는 본질적으로 당신이 한 것을했습니다. 그것은 저에게 효과적입니다.

private static class ShadowStyleSpan extends ClickableSpan { 
    private int radius; 
    private int dx; 
    private int dy; 
    private int color; 

    public ShadowStyleSpan(int radius, int dx, int dy, int color) { 
     super(); 
     this.radius = radius; 
     this.dx = dx; 
     this.dy = dy; 
     this.color = color; 
    } 

    @Override 
    public void updateDrawState(TextPaint ds) { 
     super.updateDrawState(ds); 
     ds.setShadowLayer(radius, dx, dy, color); 
    } 
} 
관련 문제