【问题标题】:To draw an Underline below the TextView in Android在 Android 中的 TextView 下方绘制下划线
【发布时间】:2011-12-23 09:58:39
【问题描述】:

我想在我的TextView 下方画下划线。我搜索了一些内容,但没有找到任何成果。

谁能帮帮我?

【问题讨论】:

    标签: android textview underline


    【解决方案1】:

    如果您想在电子邮件地址文本下划线并希望在用户单击该特定电子邮件地址时打开与电子邮件相关的应用程序,那么这是最好的方法。只需使用以下属性。

    android:autoLink="email"
    

    同样你也可以做网站

    android:autoLink="web"
    

    另外,如果你想设置文本颜色,你可以在属性下面

    android:textColorLink="@color/email_text_color"
    

    【讨论】:

      【解决方案2】:

      Kotlin 中您可以创建扩展属性:

      inline var TextView.underline: Boolean
          set(visible) {
              paintFlags = if (visible) paintFlags or Paint.UNDERLINE_TEXT_FLAG
              else paintFlags and Paint.UNDERLINE_TEXT_FLAG.inv()
          }
          get() = paintFlags and Paint.UNDERLINE_TEXT_FLAG == Paint.UNDERLINE_TEXT_FLAG
      

      并使用:

      textView.underline = true
      

      【讨论】:

        【解决方案3】:

        您可以使用 Kotlin 扩展并输入您自己的 drawUnderLine 方法。

        fun TextView.drawUnderLine() {
            val text = SpannableString(this.text.toString())
            text.setSpan(UnderlineSpan(), 0, text.length, 0)
            this.text = text
        }
        
        yourTextView.drawUnderLine()
        

        【讨论】:

          【解决方案4】:

          5 Amazing Ways To Underline A TextView In Android - Kotlin/Java & XML

          1. String html = "<u>Underline using Html.fromHtml()</u>"; textview.setText(Html.fromHtml(html));

          Html.fromHtml(String resource) 在 API 24 中已被弃用。

          所以你可以使用最新的android支持库androidx.core.text.HtmlCompat。在此之前,您需要在项目中包含依赖项。

          `implementation 'androidx.core:core:1.0.1'`
          
          1. String html = "<u> 1.1 Underline using HtmlCompat.fromHtml()</u>"; //underline textview using HtmlCompat.fromHtml() method textview11.setText(HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY));

          使用 strings.xml

          1. &lt;string name="underline_text"&gt;1.3 &amp;lt;u&gt;Underline using HtmlCompat.fromHtml() and string resource&amp;lt;/u&gt;&lt;/string&gt;

          textview13.setText(HtmlCompat.fromHtml(getString(R.string.underline_text), HtmlCompat.FROM_HTML_MODE_LEGACY));

          使用 PaintFlags

          1. textview2.setPaintFlags(textview2.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); textview2.setText("2. Underline using setPaintFlags()");

          使用 SpannableString

          `String content1 = "3.1 Underline using SpannableString";
                  SpannableString spannableString1 = new SpannableString(content1);
                  spannableString1.setSpan(new UnderlineSpan(), 0, content1.length(), 0);
                  textview31.setText(spannableString1);`
          

          【讨论】:

            【解决方案5】:

            一个简单且可持续的解决方案是创建一个图层列表并将其作为 TextView 的背景:

            <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
                <item
                    android:left="-5dp"
                    android:right="-5dp"
                    android:top="-5dp">
                    <shape>
                        <stroke
                            android:width="1.5dp"
                            android:color="@color/colorAccent" />
                    </shape>
                </item>
            </layer-list>
            

            【讨论】:

            • 如果是单行textview这个是最好的选择
            【解决方案6】:

            如果您的 TextView 具有固定宽度,替代解决方案可以是创建一个看起来像下划线的视图并将其放置在您的 TextView 正下方。

            <RelativeLayout
               android:layout_width="match_parent"
               android:layout_height="match_parent">
            
                    <TextView
                        android:id="@+id/myTextView"
                        android:layout_width="20dp"
                        android:layout_height="wrap_content"/>
            
                    <View
                        android:layout_width="20dp"
                        android:layout_height="1dp"
                        android:layout_below="@+id/myTextView"
                        android:background="#CCCCCC"/>
            </RelativeLayout>
            

            【讨论】:

              【解决方案7】:

              在 TextView 中有三种方式为文本添加下划线。

              1. SpannableString

              2. setPaintFlags(); 的 TextView

              3. Html.fromHtml();

              让我向您解释所有方法:

              第一种方法

              对于 TextView 中的文本,您必须使用 SpannableString

              String udata="Underlined Text";
              SpannableString content = new SpannableString(udata);
              content.setSpan(new UnderlineSpan(), 0, udata.length(), 0);
              mTextView.setText(content);
              

              第二种方法

              可以利用TextView的setPaintFlags方法给TextView的文字加下划线。

              例如。

              mTextView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
              mTextView.setText("This text will be underlined");
              

              如果你想穿透文本,你可以参考Paint类的常量。

              第三种方法

              利用Html.fromHtml(htmlString);

              String htmlString="<u>This text will be underlined</u>";
              mTextView.setText(Html.fromHtml(htmlString));
              

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

              【讨论】:

              • 很高兴听到这个消息。将此问题标记为已解决,以便其他用户可以参考。
              • 第三种方法是使用Html.fromHtml("&lt;u&gt;This text will be underlined&lt;/u&gt;"),但我不得不承认我更喜欢使用 SpannableStrings。 @Kartik:您不妨在文本上使用StrikethroughSpan 来创建删除线效果。 :)
              • 喜欢第三种方法。短小精悍,只需在我的程序中添加一行代码。
              • 我知道这有点老了,但是有没有办法设置下划线的粗细?
              • 在 PreferenceCategory 中,哪些用于preferenceActivity 内容?
              【解决方案8】:

              对于仍在查看此问题的任何人。这是一个超链接,但您可以将其修改为一个简单的下划线:

              创建一个可绘制对象(hyperlink_underline.xml):

              <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
                <item android:top="-10dp"
                      android:left="-10dp"
                      android:right="-10dp">
                  <shape android:shape="rectangle">
                    <solid android:color="@android:color/transparent"/>
              
                    <stroke android:width="2dp"
                            android:color="#3498db"/>
                  </shape>
                </item>
              </layer-list>
              

              创建新样式:

              <style name="Hyperlink">
                  <item name="android:textColor">#3498db</item>
                  <item name="android:background">@drawable/hyperlink_underline</item>
                </style>
              

              然后在你的 TextView 上使用这个样式:

              <TextView
                  android:layout_height="wrap_content"
                  android:layout_width="wrap_content"
                  local:MvxBind="Text Id; Click ShowJobInfoCommand"
                  style="@style/HyperLink"/>
              

              【讨论】:

              • 谢谢,这很有用,我学到了一些新东西,还有左上角等属性,我们可以用作上线或侧线。再次感谢
              【解决方案9】:

              只需在你的 string.xml 资源文件中用 标签包围你的文本

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

              在你的活动/片段中

              mTextView.setText(R.string.your_string);
              

              【讨论】:

              • @CHAKRAVARTHI 如果在设置之前将文本转换为字符串,它将不起作用。例如。 textView.setText(getString(R.string.text)) 对: textView.setText(getText(R.string.text)) 或只是 textView.setText(R.string.text)。原因在于getText() 返回带有下划线跨度的Spannable,但如果您使用getString(),它会将Spannable 转换为String 生成的跨度将被删除。
              • 好点!为了更清楚,我已经编辑了我当前的答案
              【解决方案10】:

              它对我有用。

              tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-03-12
                • 2012-11-13
                • 1970-01-01
                • 2018-08-18
                • 1970-01-01
                • 2013-09-29
                相关资源
                最近更新 更多