【问题标题】:Underline text in Xamarin.Android witn MVVMCross带有 MVVMCross 的 Xamarin.Android 中的文本下划线
【发布时间】:2018-03-23 01:13:05
【问题描述】:

我有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获取字符串

  1. 油漆。

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

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

对我不起作用,除了我看到绿色下划线并评论此决定已被弃用。

如何将我的TextView 标记为下划线?

【问题讨论】:

标签: android xamarin.android textview mvvmcross


【解决方案1】:

选项 2 看起来像 Java 而不是 xamarin c#,试试:

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

并使用正确的 ID。

【讨论】:

    【解决方案2】:

    创建自己的 textView 并使用它来代替 axml 中的标准 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;
    }
    

    【讨论】:

    • 我正在尝试使用它。我在Helpers 中创建了UnderlineTextView.cs。但我用错误在UnderlineTextView 下划线:CS1729 'TextView' does not contain a constructor that takes 0 arguments
    • 继承的时候还需要继承textView的构造函数!
    【解决方案3】:

    您应该使用txtView.TextFormatted = Html.fromHtml("&lt;u&gt;underlined&lt;/u&gt; 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]);" />
    

    【讨论】:

      猜你喜欢
      • 2017-07-10
      • 2017-04-13
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2015-02-27
      • 2014-04-29
      • 1970-01-01
      相关资源
      最近更新 更多