2017-01-03 2 views
1

안녕하세요 저는 Xamarin 양식 PCL을 사용하여 크로스 플랫폼 앱을 제작하고 있습니다. 해당 응용 프로그램에서 레이블 텍스트에 문자 간격을 추가해야합니다. 레이블 텍스트 문자 사이에 공백이 필요합니다. 모든 플랫폼에서이를 달성 할 수있는 방법이 있습니까? Letterspacing 속성은 ANDROID에서 사용할 수 있지만 ios, uwp, win8/8.1과 같은 모든 플랫폼에 대한 솔루션이 필요합니다.Xamarin 양식 : 레이블 텍스트의 문자 간격

+0

그런데 왜 제목이 우리를 외치고에서 iOS

에 라벨을 보일 것 :다음 코드 예제에서는 LetterSpacingLabel 컨트롤을 사용하는 방법을 보여줍니다? – Mureinik

+0

@Mureinik 그 누구에게도 외치는 것은 아닙니다. – Sonali

+0

이제는 편집 해 보았습니다. 감사! – Mureinik

답변

4

양식

public class LetterSpacingLabel : Label 
{ 
    public float LetterSpacing { get; set; } 
} 

코드처럼 보이는 안드로이드 렌더러 제어 :

public class LetterSpacingLabelRenderer : LabelRenderer 
{ 
    protected LetterSpacingLabel LetterSpacingLabel { get; private set; } 

    protected override void OnElementChanged(ElementChangedEventArgs<Label> e) 
    { 
     base.OnElementChanged(e); 

     if (e.OldElement == null) 
     { 
      this.LetterSpacingLabel = (LetterSpacingLabel)this.Element; 
     } 

     var letterSpacing = this.LetterSpacingLabel.LetterSpacing; 
     this.Control.LetterSpacing = letterSpacing; 

     this.UpdateLayout(); 
    } 
} 

아이폰 OS 렌더러

protected override void OnElementChanged(ElementChangedEventArgs<Label> e) 
    { 
     base.OnElementChanged(e); 
     var data = Element as LetterSpacingLabel; 
     if (data == null || Control == null) 
     { 
      return; 
     } 

     var text = Control.Text; 
     var attributedString = new NSMutableAttributedString(text); 

     var nsKern = new NSString("NSKern"); 
     var spacing = NSObject.FromObject(data.LetterSpacing * 10); 
     var range = new NSRange(0, text.Length); 

     attributedString.AddAttribute(nsKern, spacing, range); 
     Control.AttributedText = attributedString; 
    } 
< LetterSpacingLabel LetterSpacing="0.5" Text="Lorem ipsum dolor sit amet" /> 

다음 스크린 샷은 포스트 here