如何在 Android XML 中为文本添加下划线?

问题描述 投票:0回答:12

如何在 XML 文件中为文本添加下划线?我在

textStyle
中找不到选项。

android textview android-styles underline
12个回答
221
投票

如果您使用的是字符串资源xml文件(支持HTML标签),可以使用

<b> </b>
<i> </i>
<u> </u>
来完成。

<resources>
    <string name="your_string_here">
        This is an <u>underline</u>.
    </string>
</resources>

如果您想在代码使用中强调某些内容:

TextView tv = (TextView) view.findViewById(R.id.tv);
SpannableString content = new SpannableString("Content");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
tv.setText(content);

74
投票

使用这个:

TextView txt = (TextView) findViewById(R.id.Textview1);
txt.setPaintFlags(txt.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

27
投票
<resource>
    <string name="your_string_here">This is an <u>underline</u>.</string>
</resources>

如果不起作用,那么

<resource>
<string name="your_string_here">This is an &lt;u>underline&lt;/u>.</string>

因为“<" could be a keyword at some time.

并用于显示

TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(getString(R.string.your_string_here)));

15
投票

首先,转到 String.xml 文件

您可以在此处添加任何 HTML 属性,例如 、斜体、粗体或下划线。

    <resources>
        <string name="your_string_here">This is an <u>underline</u>.</string>
    </resources>

5
投票

另一种方法是创建一个扩展 TextView 的自定义组件。这对于需要有多个带下划线的 TextView 的情况很有用。

这是该组件的代码:

package com.myapp.components;

import android.content.Context;
import android.support.v7.widget.AppCompatTextView;
import android.text.SpannableString;
import android.text.style.UnderlineSpan;
import android.util.AttributeSet;

public class LinkTextView extends AppCompatTextView {
    public LinkTextView(Context context) {
        this(context, null);
    }

    public LinkTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        SpannableString content = new SpannableString(text);
        content.setSpan(new UnderlineSpan(), 0, content.length(), 0);

        super.setText(content, type);
    }
}

以及如何在xml中使用它:

<com.myapp.components.LinkTextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Hello World!" />

5
投票

我使用了下面的方法,它对我有用。下面是 Button 的示例,但我们也可以在 TextView 中使用。

Button btnClickMe = (Button) findViewById(R.id.btn_click_me);
btnClickMe.setPaintFlags(btnClickMe.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

4
投票

您可以使用下面的标记,但请注意,如果将

textAllCaps
设置为
true
,下划线效果将被删除。

<resource>
    <string name="my_string_value">I am <u>underlined</u>.</string>
</resources>


注意

将 textAllCaps 与包含标记的字符串 (login_change_settings) 一起使用;标记将因大写转换而降低

textAllCaps 文本转换最终将调用 CharSequence 上的 toString,其最终效果是删除任何标记,例如 .此检查查找包含也指定 textAllCaps=true 的标记的字符串的用法。


4
投票

创建字符串资源:

<string name="HEADER_DELTA"><b><u>DELTA</u></b></string>

并添加到您的文本视图

    <TextView
        android:id="@+id/txtDeltaText"
        style="@style/Default_TextBox_Small"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:gravity="center_horizontal"
        android:text="@string/HEADER_DELTA"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/txtActualMetric"
        app:layout_constraintTop_toBottomOf="@+id/txtMetricName" />

3
投票

有多种方法可以在 Android TextView 中实现带下划线的文本。

1.

<u>This is my underlined text</u>

I just want to underline <u>this</u> word

2.您可以通过编程方式执行相同的操作。

`textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);`

3.可以通过创建一个SpannableString然后将其设置为TextView文本属性来完成

SpannableString text = new SpannableString("Voglio sottolineare solo questa parola");
text.setSpan(new UnderlineSpan(), 25, 6, 0);
textView.setText(text);

2
投票

完成 Bhavin 的回答。 例如,添加下划线或重定向。

((TextView) findViewById(R.id.tv_cgu)).setText(Html.fromHtml(getString(R.string.upload_poi_CGU)));

<string name="upload_poi_CGU"><![CDATA[ J\'accepte les <a href="">conditions générales</a>]]></string>

您可以在这里了解兼容标签: http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html


1
投票

如果你想比较文本字符串或者文本会动态变化,那么你可以在约束布局中创建一个视图,它将根据文本长度进行调整,如下所示

 <android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/txt_Previous"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="8dp"
        android:gravity="center"
        android:text="Last Month Rankings"
        android:textColor="@color/colorBlue"
        android:textSize="15sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <View
        android:layout_width="0dp"
        android:layout_height="0.7dp"
        android:background="@color/colorBlue"
        app:layout_constraintEnd_toEndOf="@+id/txt_Previous"
        app:layout_constraintStart_toStartOf="@+id/txt_Previous"
        app:layout_constraintBottom_toBottomOf="@id/txt_Previous"/>


</android.support.constraint.ConstraintLayout>

0
投票

我在这个话题上也遇到了一些麻烦。

第 1 步: 在底部的

manifest.xml
中,添加以下内容

<queries>
        <intent>
            <action android:name="android.intent.action.SENDTO" />
            <data android:scheme="mailto" />
        </intent>
        <intent>
            <action android:name="android.intent.action.SEND" />
            <data android:mimeType="*/*" />
        </intent>
    </queries>

步骤 2a: 要发送邮件,请执行以下操作。这应该适用于新旧 API 版本 (Java)。

    String recipient = "[email protected]";
    String subject = "Your subject";
    String message = "Your message";

    Intent selectorIntent = new Intent(Intent.ACTION_SENDTO);
    final String selectorData = "mailto:" + Uri.encode(recipient) + "?subject=" + Uri.encode(subject) + "&body=" + Uri.encode(message);
    selectorIntent.setData(Uri.parse(selectorData));

    final Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent.setData(Uri.parse(selectorIntent.getDataString()));
    emailIntent.putExtra(Intent.EXTRA_EMAIL, recipient);
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
    emailIntent.putExtra(Intent.EXTRA_TEXT, message);
    emailIntent.setSelector(selectorIntent);
    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    try{
        Intent.createChooser(emailIntent, getResources().getString(R.string.about_i));
    }catch(Exception e){
        // catch in case of error
    }

步骤 2b: 要发送邮件,请执行以下操作。这应该适用于新旧 API 版本 (Kotlin)。

    val recipient = "[email protected]"
    val subject = "Your subject"
    val message = "Your message"

    val selectorIntent = Intent(Intent.ACTION_SENDTO)
    val selectorData = "mailto:" + Uri.encode(recipient) + "?subject=" + Uri.encode(subject) + "&body=" + Uri.encode(message)
    selectorIntent.setData(Uri.parse(selectorData))

    val emailIntent = Intent(Intent.ACTION_SEND)
    emailIntent.setData(Uri.parse(selectorIntent.dataString))
    emailIntent.putExtra(Intent.EXTRA_EMAIL, recipient)
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
    emailIntent.putExtra(Intent.EXTRA_TEXT, message)
    emailIntent.selector = selectorIntent
    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    try {
        Intent.createChooser(emailIntent, "Choose Email Client…")
    } catch (e: Exception) {
        // catch in case of error
    }

第 3 步: 错误预防:不要在 xml 中使用类似的内容

android:autoLink =“电子邮件”

这将导致忽略您意图中的主题和数据。 ^^

© www.soinside.com 2019 - 2024. All rights reserved.