【问题标题】:Underline a dynamically generated TextView in android下划线在android中动态生成的TextView
【发布时间】:2012-11-13 14:23:03
【问题描述】:

我有一个文本视图,它具有在 xml 文件中设置的特定文本,并且在 strings.xml 中它带有下划线。现在我正在从 edittext 中的内容更改此文本视图,即用户输入的任何内容。在将该文本设置为文本视图之前,我还将附加某个字符串。我希望这个新字符串形成为带有蓝色下划线并且可点击。我尝试使用

 SpannableString phoneNum = new SpannableString(totalPhoneNum);
 phoneNum.setSpan(new UnderlineSpan(), 0, totalPhoneNum.length(), 0);   
 phoneNum.setText(totalPhoneNum);

这行不通!我可以在 onResume() 中使用它吗 我不知道如何将下划线的颜色更改为蓝色:(

【问题讨论】:

标签: android textview


【解决方案1】:

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

  1. SpannableString

  2. setPaintFlags(); of 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));

发件人:
To draw an Underline below the TextView in Android

【讨论】:

    【解决方案2】:

    在您的布局 xml 文件中添加以下代码:

    <TextView 
        android:autoLink="phone"
        android:linksClickable="true" 
        android:textColorLink="#5e9baa" />
    

    【讨论】:

      【解决方案3】:

      xml:

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical" android:layout_width="fill_parent"
          android:layout_height="fill_parent">
          <TextView android:layout_width="fill_parent"
              android:layout_height="wrap_content" android:text="@string/hello" />
      </LinearLayout>
      

      java:

      public class TextDemoActivity extends Activity {
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(new ViewWithRedDot(this));
          }
      }
      
      class ViewWithRedDot extends View {
          public ViewWithRedDot(Context context) {
              super(context);
          }
      
          @Override
          protected void onDraw(Canvas canvas) {
      
              Paint circlePaint = new Paint();
              Typeface mType = Typeface.create(Typeface.SANS_SERIF, Typeface.ITALIC);
              circlePaint.setTextSize(25);
              circlePaint.setColor(Color.RED);
              circlePaint.setTypeface(mType);
              canvas.drawText("Default Typeface", 50, 100, circlePaint);
              //
              circlePaint.setFlags(Paint.UNDERLINE_TEXT_FLAG);
              circlePaint.setColor(Color.YELLOW);
              canvas.drawText("Underline Text Flag", 50, 120, circlePaint);
              //
              circlePaint.setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
              circlePaint.setColor(Color.GREEN);
              canvas.drawText("Strike Thru Text Flag", 50, 140, circlePaint);
              //
              circlePaint.setFlags(Paint.ANTI_ALIAS_FLAG);
              circlePaint.setColor(Color.WHITE);
              canvas.drawText("Anti Alias Flag", 50, 160, circlePaint);
              //
              circlePaint.setFlags(Paint.DEV_KERN_TEXT_FLAG);
              circlePaint.setColor(Color.WHITE);
              canvas.drawText("Dev Kern Text Flag", 50, 180, circlePaint);
              //
              circlePaint.setFlags(Paint.FAKE_BOLD_TEXT_FLAG);
              circlePaint.setColor(Color.CYAN);
              canvas.drawText("Fake Bold Text Flag", 50, 200, circlePaint);
          }
      }
      

      【讨论】:

        【解决方案4】:

        试试这个

        String txt = "<u style=\"text-decoration: none; border-bottom: 1px solid #FF0000\">parragraph</u>";
        phoneNum.setText(Html.fromHtml(txt));
        

        此样式将删除默认下划线并在我们传递的颜色处放置一个 1 px 的边框底部。

        【讨论】:

        • mTextView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);这行得通...我现在得到下划线...如何更改下划线的颜色。
        【解决方案5】:

        使用这个:

        String text = "some string <u><font color=\"#00FF00\">some link</font></u>";
        editText.setText(Html.fromHtml(text), TextView.BufferType.SPANNABLE);
        

        【讨论】:

        • mTextView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);这行得通...我现在得到下划线...如何更改下划线的颜色
        【解决方案6】:

        你可以这样使用

        phoneNum.setText(Html.fromHtml("W : "+"<u><FONT COLOR=\"#80776b\" >"+Your text+"</Font></u>"));
        

        使用你想要的颜色代码。

        【讨论】:

        • mTextView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);这行得通...我现在得到下划线...如何更改下划线的颜色。
        • 您可以使用上面的代码...在这里您可以设置字体颜色..随心所欲..
        • 只需要更改下划线的颜色
        猜你喜欢
        • 2011-06-08
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 2017-03-12
        • 2018-08-18
        • 1970-01-01
        • 2017-09-06
        • 2013-09-29
        相关资源
        最近更新 更多