我可以在android布局中加下划线吗?
如何在Android布局xml
文件中定义带下划线的文本?
如果您使用支持HTML标签(如<b></b>
, <i></i>
和<u></u>
的string资源 xml文件,则可以实现此function。
<resources> <string name="your_string_here">This is an <u>underline</u>.</string> </resources>
如果你想从代码使用下划线:
TextView textView = (TextView) view.findViewById(R.id.textview); SpannableString content = new SpannableString("Content"); content.setSpan(new UnderlineSpan(), 0, content.length(), 0); textView.setText(content);
你可以试试
textview.setPaintFlags(textview.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
TextView中的文本的三种方式 。
SpannableString
setPaintFlags(); 的TextView
Html.fromHtml();
第一种方法
对于在TextView中的文本,你必须使用SpannableString
String udata="Underlined Text"; SpannableString content = new SpannableString(udata); content.setSpan(new UnderlineSpan(), 0, udata.length(), 0);//where first 0 shows the starting and udata.length() shows the ending span.if you want to span only part of it than you can change these values like 5,8 then it will underline part of it. 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));
上面的“接受”的答案不起作用(当你尝试使用像textView.setText(Html.fromHtml(String.format(getString(...), ...)))
的string。
如文档中所述,必须使用<
标识符来转义(html实体编码的)内部标签的开头括号<
,例如结果应该如下所示:
<resource> <string name="your_string_here">This is an <u>underline</u>.</string> </resources>
然后在你的代码中你可以设置文本:
TextView textView = (TextView) view.findViewById(R.id.textview); textView.setText(Html.fromHtml(String.format(getString(R.string.my_string), ...)));
一行解决scheme:
textview.setPaintFlags(textview.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Strings.xml文件内容:
<resource> <string name="my_text">This is an <u>underline</u>.</string> </resources>
布局xml文件shold使用以上string资源,具有以下textview属性,如下所示:
<TextView android:layout_width="fill_parent" android:gravity="center_horizontal" android:layout_height="wrap_content" android:selectAllOnFocus="false" android:linksClickable="false" android:autoLink="all" android:text="@string/my_text" />
一线解决scheme
myTextView.setText(Html.fromHtml("<p><u>I am Underlined text</u></p>"));
这有点晚,但可能对某人有用。
对于Button和TextVeiw,这是最简单的方法:
button:
button = (Button) view.findViewById(R.id.btton1); button.setPaintFlags(button.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
TextView的:
textView = (Textview) view.findViewById(R.id.textview1); textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
我知道这是一个迟到的答案,但我想出了一个很好的解决scheme…我从Anthony Forloney的代码中强调了文本的答案,并创build了一个TextView的子类为您处理。 然后,只要想要带下划线的TextView,就可以使用XML中的子类。
这是我创build的课程:
import android.content.Context; import android.text.Editable; import android.text.SpannableString; import android.text.TextWatcher; import android.text.style.UnderlineSpan; import android.util.AttributeSet; import android.widget.TextView; /** * Created with IntelliJ IDEA. * User: Justin * Date: 9/11/13 * Time: 1:10 AM */ public class UnderlineTextView extends TextView { private boolean m_modifyingText = false; public UnderlineTextView(Context context) { super(context); init(); } public UnderlineTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public UnderlineTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //Do nothing here... we don't care } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //Do nothing here... we don't care } @Override public void afterTextChanged(Editable s) { if (m_modifyingText) return; underlineText(); } }); underlineText(); } private void underlineText() { if (m_modifyingText) return; m_modifyingText = true; SpannableString content = new SpannableString(getText()); content.setSpan(new UnderlineSpan(), 0, content.length(), 0); setText(content); m_modifyingText = false; } }
现在…只要你想在XML中创build一个带下划线的文本视图,你只需要执行以下操作:
<com.your.package.name.UnderlineTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:gravity="center" android:text="This text is underlined" android:textColor="@color/blue_light" android:textSize="12sp" android:textStyle="italic"/>
我在这个XML片段中添加了其他选项,以显示我的示例可以更改文本的颜色,大小和样式。
希望这可以帮助!
检查下划线的可点击button样式:
<TextView android:id="@+id/btn_some_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn_add_contact" android:textAllCaps="false" android:textColor="#57a0d4" style="@style/Widget.AppCompat.Button.Borderless.Colored" />
strings.xml中:
<string name="btn_add_contact"><u>Add new contact</u></string>
结果:
Romain Guy在GitHub的可用源代码的介质上描述了最近绘制带下划线的文本的方法。
试试这个代码
在XML中
<resource> <string name="my_text"><![CDATA[This is an <u>underline</u>]]></string> </resources>
在代码中
TextView textView = (TextView) view.findViewById(R.id.textview); textView.setText(Html.fromHtml(getString(R.string.my_text)));
祝你好运!
我用这个XML绘制来创build一个底部边框,并将drawable作为背景应用到我的textview
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle" > <solid android:color="@android:color/transparent" /> </shape> </item> <item android:top="-5dp" android:right="-5dp" android:left="-5dp"> <shape> <solid android:color="@android:color/transparent" /> <stroke android:width="1.5dp" android:color="@color/pure_white" /> </shape> </item>
xml中一个简单而灵活的解决scheme:
<View android:layout_width="match_parent" android:layout_height="3sp" android:layout_alignLeft="@+id/your_text_view_need_underline" android:layout_alignRight="@+id/your_text_view_need_underline" android:layout_below="@+id/your_text_view_need_underline" android:background="@color/your_color" />
- 转到strings.xml资源文件
- 根据需要在资源文件中添加带有HTML下划线标记的string。
strings.xml HTML下划线示例
- 在Java代码中调用string资源ID如下:
sampleTextView.setText(R.string.sample_string);
- 输出应该有下划线“Stackoverflow”字样。
此外,下面的代码将不会打印下划线:
String sampleString = getString(R.string.sample_string); sampleTextView.setText(sampleString);
而是使用下面的代码来保留富文本格式:
String sampleString = getText(R.string.sample_string); sampleTextView.setText(sampleString);
“你可以使用getString(int)或者getText(int)来检索一个string,getText(int)保留了应用于该string的任何丰富的文本样式。 Android文档。
请参阅文档: https : //developer.android.com/guide/topics/resources/string-resource.html
我希望这有帮助。
只需使用string资源文件中的属性,例如
<string name="example"><u>Example</u></string>}
我在使用自定义字体时遇到了问题,使用资源文件技巧( <u>Underlined text</u>
)创build的<u>Underlined text</u>
确实起作用,但Android设法将下划线转换为某种触发槽。
我用这个答案来自己的文本视图下绘制一个边框: https ://stackoverflow.com/a/10732993/664449。 显然这不适用于部分带下划线的文本或多线文本。