약간의 검색을 수행했습니다. 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);
}
이 링크를 보았습니다. TextView 전체에 레이어를 설정하지만 텍스트의 하위 선택 만하면됩니다. – CFD