簡體   English   中英

Xamarin.Android中帶有下划線的文本和MVVMCross

[英]Underline text in Xamarin.Android witn MVVMCross

我有Xamarin.Android project並使用MVVMCross 我需要在.axml布局中添加一些帶下划線的文本。

我找到了一些方法來做,但是對我不起作用。

我有這樣的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<include
    layout="@layout/toolbar" />
<TextView
    android:id="@+id/TextView01"
    android:textSize="16sp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:layout_below="@+id/toolbar"
    local:MvxBind="Text Strings[Text01]" />
<TextView
    android:id="@+id/textLink"
    android:textSize="13sp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:textColor="#1565C0"
    android:layout_below="@id/TextView01"
    local:MvxBind="Text Strings[textLink]; Click MyCommand" />
</RelativeLayout>
  1. 字符串。

     <string name="your_string"><u>Underlined text</u></string> 

我無法使用這種方式,因為我使用兩種語言,並且文件夾Locales包含兩個.txt文件。 因此該項目不會從strings.xml獲取strings.xml

  1. 塗料。

      TextView MyLink = FindViewById<TextView>(Resource.Id.MyLink); MyLink.PaintFlags = (MyLink.PaintFlags | Android.Graphics.PaintFlags.UnderlineText); 
  2. FromHtml。

     txtView.setText(Html.fromHtml("<u>underlined</u> text")); 

這對我不起作用,除了我看到綠色的下划線並指出此決定已過時,我還說。

如何將我的TextView標記為下划線?

選項2看起來像Java而不是xamarin c#,請嘗試:

txtView.PaintFlags = (txtView.PaintFlags | Android.Graphics.PaintFlags.UnderlineText);

並使用正確的ID。

創建自己的textView並使用它代替axml中的standart textView

public class UnderlineTextView : TextView

private void Initialize()
{
    //this.PaintFlags = this.PaintFlags | Android.Graphics.PaintFlags.UnderlineText;
    //this.Text = "This text will be underlined";

    String underlineData = this.Text;
    SpannableString content = new SpannableString(underlineData);
    content.SetSpan(new UnderlineSpan(), 0, underlineData.Length, 0);
    // 0 specify start index and underlineData.length() specify end index of styling
    this.TextFormatted = content;
}

您應該使用txtView.TextFormatted = Html.fromHtml("<u>underlined</u> text"); 使其按預期工作。

在使用MVVM模式時,通常理想的是使用數據綁定。 將數據綁定與MvvmCross結合使用的一種方法是使用ValueConverter ,該轉換器接受字符串輸入並輸出SpannableString ,您可以將其與TextFormatted MvvmCross綁定一起使用。

public class UnderlinedStringValueConverter : MvxValueConverter<string, SpannableString>
{
    protected override SpannableString Convert(string value, Type targetType, object parameter, CultureInfo culture)
    {
        var spannable = new SpannableString(value ?? string.Empty);
        spannable.SetSpan(new UnderlineSpan(), 0, spannable.Length(), 0);
        return spannable;
    }
}

然后在您的TextView AXML中:

<TextView
  ....
  local:MvxBind="TextFormatted UnderlinedString(Strings[textLink]);" />

暫無
暫無

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

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