[英]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>
字符串。
<string name="your_string"><u>Underlined text</u></string>
我無法使用這種方式,因為我使用兩種語言,並且文件夾Locales
包含兩個.txt
文件。 因此該項目不會從strings.xml
獲取strings.xml
塗料。
TextView MyLink = FindViewById<TextView>(Resource.Id.MyLink); MyLink.PaintFlags = (MyLink.PaintFlags | Android.Graphics.PaintFlags.UnderlineText);
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.