簡體   English   中英

將Android可翻譯字符串傳遞給ValueConverter

[英]Passing an Android translatable string to ValueConverter

我正在嘗試將@string/something傳遞給值轉換器,以便我可以使用它來格式化輸出,所以說我有一個DateTime值,我想將"Signup Date: {0}"傳遞給ValueConverter 。

問題是,上面的文本是可翻譯的,因此它來自任何給定語言的strings.xml文件。 到目前為止,我試過這個:

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

注意ConverterParameter=@string/release_date 我該怎么做?

您可以使用將字符串資源名稱作為參數的值轉換器,在資源中查找其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作為參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM