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>
字符串.
<string name="your_string"><u>Underlined text</u></string>
我不能使用这种方式,因为我使用两种语言并且文件夹 Locales
有两个 .txt
文件。所以该项目不会从 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
标记为带下划线?
创建自己的 textView 并使用它代替 xml 中的标准 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;
}
选项 2 看起来像 Java 而不是 xamarin c#,尝试:
txtView.PaintFlags = (txtView.PaintFlags | Android.Graphics.PaintFlags.UnderlineText);
并使用正确的 ID。
您应该使用 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]);" />
我有 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
绘画。
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
标记为带下划线?
创建自己的 textView 并使用它代替 xml 中的标准 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;
}
选项 2 看起来像 Java 而不是 xamarin c#,尝试:
txtView.PaintFlags = (txtView.PaintFlags | Android.Graphics.PaintFlags.UnderlineText);
并使用正确的 ID。
您应该使用 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]);" />