2016-03-26 17 views
3

DateTimeの値を持っているとしたら、出力をフォーマットするために値のコンバーターに@string/somethingを渡そうとしています。"Signup Date: {0}"をValueConverterに渡したい。Android変換可能な文字列をValueConverterに渡す

問題は、上のテキストは翻訳可能なので、指定された言語のファイルstrings.xmlに由来しています。これまでに、私はこれを試しました:

<TextView 
    local:MvxBind="Text SignupDate, Converter=FriendlyDate, [email protected]/release_date" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ellipsize="end" 
    android:maxLines="5" 
    android:paddingTop="8dp" 
    style="@style/WhiteParagraphText" /> 

[email protected]/release_dateに注意してください。どうしたらいいですか?

答えて

2

これは、文字列をパラメータとして使用し、リソースとしてをパラメータとして使用し、そのIDをリソース内で調べ、このIDによってリソースから値を取得する値コンバータで実行できます。

public class FriendlyDateValueConverter : MvxValueConverter<DateTime, string> 
{ 
    protected override string Convert(DateTime value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var param = parameter as string; 
     if (string.IsNullOrEmpty(param)) 
     { 
      return string.Empty; 
     } 

     var globals = MvvmCross.Platform.Mvx.Resolve<IMvxAndroidGlobals>(); 
     var res = globals.ApplicationContext.Resources; 
     var id = res.GetIdentifier(param, "string", globals.ApplicationContext.PackageName); 
     // id=0, if the resource could not be found -> add some error handling 

     var format = res.GetString(id); 
     return string.Format(format, value); 
    } 
} 

使用

<TextView 
    local:MvxBind="Text SignupDate, Converter=FriendlyDate, ConverterParameter='release_date'" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ellipsize="end" 
    android:maxLines="5" 
    android:paddingTop="8dp" /> 

注パラメータとして'release_date'代わりに@string/release_dateを渡します。

関連する問題