android TextView 添加超链接
- 格式:doc
- 大小:28.00 KB
- 文档页数:2
【黑马程序员】TextView中显示表情图片、超链接及特殊字体通常情况下,我们使用TextView展示的都是单一的文字内容,格式也比较固定。
不过有时候我们需要对TextView中的文字进行处理,例如QQ聊天的时候,“/wx”就代表了微笑的表情,在文本显示的时候就要替换成图片的形式展示。
而且,有些场景下需要我们在一串文本中掺杂一个超链接、把某个词组加粗显示等等。
这时候都要我们对TextView中的内容进行处理了,如果大家出现了这样的需求,推荐大家使用一个Android中的特殊的类——SpannableString。
首先我们看一些这个类的继承关系,可以看出,SpannableString是实现了CharSequence接口的,所以我们可以把这个类的对象直接设置给TextView和EditText使用。
而对字符串的处理都是通过SpannableString 的setSpan(Object what, int start, int end,int flags)方法调用设置的,这里接收三个参数,第一个参数为设置的Span类型,我们接下来会详细展示,第二个和第三个参数代表文本需要处理的开始和结束的位置,最后一个参数是Span的位置是否包含开始位置和结束位置本身。
接下来我们直接上代码,看一看它在各个场景下的使用。
先看第一种案例,类似于QQ表情,我们要把特殊的字符串替换为表情图片来展示。
这里我们先把SpannableString创建出来,构造接受的参数就是我们需要处理的字符串,创建完成之后就可以通过setSpan的方式替换文本中的内容了。
这里我们通过正则表达式替换了所有的“<img>”为应用程序的默认图标,在展示结果的时候,上方的TextView 我们展示未处理的文本,下方的TextView展示处理后的内容。
01 02 03 04 0506 07 08 09 10 11 12 13 // 示例1,将文字中的特定字符转换为图片显示String string 1 = "把文字中的<img>替换为应用程序图标<img><img>";// 多次更改内容需要使用SpannableStringSpannableString spannableString 1 = new SpannableString (string 1);String regex = "<img>";Pattern pattern = pile (regex );Matcher matcher = pattern.matcher (string 1);while (matcher.find ()) {spannableString 1.setSpan (new ImageSpan (this , R.mipmap.ic_launcher ), matcher.start (),matcher.end (), Spanned.SPAN_INCLUSIVE_INCLUSIVE );}tv_1.setText (string 1);tv_1_span.setText (spannableString 1);执行效果如下,可以看出,文本的“<img>”都已经替换为了图片:如果我们把所有的表情规则都预定义好存入数据库中,就可以进行动态的规则匹配来实现QQ 表情的效果了。
1.只是在主程序里面添加此代码:TextView textView = new TextView(this);textView.setText("你好啊");setContentView(textView);就会在Android虚拟机上显示“你好啊”2.只在Main.xml里面添加代码:<TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="你好"/>3.4.设置超链接:android:autoLink=”all”5.跑马灯:android:singleLine=”true”把所以要跑马灯的都显示成一行android:focusable="true"android:ellipsize="marquee"android:marqueeRepeatLimit="marquee_forever"android:focusableInTouchMode="true"6.设置字体颜色:TextView tv = (TextView) findViewById();String str = "欢迎大家收看《Android开发从零开始》系列课程,感谢大家的支持。
";SpannableStringBuilder style = new SpannableStringBuilder(str); style.setSpan(new ForegroundColorSpan(Color.RED), 0, 6,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);style.setSpan(new ForegroundColorSpan(Color.GREEN), 6, 21,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);style.setSpan(new ForegroundColorSpan(Color.BLUE), 21, 26,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);tv.setText(style);7.8.@动画,是android 自带的an1.setDuration(1000);休息的时间问1000毫秒imgv1.startAnimation(an1);// startAnimation 启动动画9.给自己的界面设置空间大小Android:layout_weight=”X”10.实现图片的循环a先取得getContext的返回最大值Public int getContext(){Return Integer.MAX_VALUE;}b有就是设置图片给ImageView对象Imageview.setImageResource(resides[position%resIds.length]);c.我们还可以给图片添加一个边框首先定义一个int mGalleryItemBackground;,然后取得Gallery属性的Index id的值public ImageAdapter(Context c) {mContext = c;// 使用在res/value/attrs.xml中的Gallery属性TypedArray a = obtainStyledAttributes(R.styleable.Gallery);// 取得Gallery属性的Index idmGalleryItemBackground = a.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0);// 让对象的styleable属性能够反复使用a.recycle();}在res/value/attrs.xml的代码<declare-styleable name="Gallery"><attr name="android:galleryItemBackground"/></declare-styleable>11.AlertDialog的使用AlertDialog.Builder builder = new AlertDialog.Builder(C018_onDoubleClickActivity.this);builder.setTitle("双击");builder.setMessage("Very Good");builder.show();图片的淡进淡出:AlphaAnimationaa = new AlphaAnimation(1, 0);// 1, 0从透明到不透明图片的移动:TranslateAnimationta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF, 0.5f);ta.setDuration(3000); //显示的时间startAnimation(al);//启动startAnimation(ta);图片的旋转:RotateAnimationra = new RotateAnimation(0, 720, Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);图片的伸缩:ScaleAnimationsa = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);帧动画Alpha渐变效果共同属性fromX, toX, fromY, toY, pivotXType, pivotXValue, pivotYType, pivotYValueTabHost添加背景图片tabHost.addTab(tabHost.newTabSpec("Second").setIndica tor("Second",getResources().getDrawable(android.R.dra wable.alert_dark_frame)));用Timer获取系统的时间;;@Overridepublicint onStartCommand(Intent intent, int flags, int startId) {timer = new Timer();task = new TimerTask() {@Overridepublicvoid run() {Calendar c = Calendar.getInstance();String time = c.get(Calendar.HOUR_OF_DAY) + ":"+ c.get(Calendar.MINUTE) + ":" +c.get(Calendar.SECOND);System.out.println(time);}};timer.schedule(task, 1000, 1000);returnsuper.onStartCommand(intent, flags, startId);}。
Android 的TextView 使用Html 来处理图片显示、字体样式、超链接等2012/02/09 0 一、[Android 实例]实现TextView 里的文字有不同颜色转eoe:eoeandroid/thread-4496-1-1.htmlimport android.text.Html;TextView t3 = (TextView) findViewById(R.id.text3);t3.setText( Html.fromHtml( b text3: /b Text with a a href=\ google\ link/a created in the Java source code using HTML. ));二、TextView 显示html 文件中的图片转javaeye:da-en.javaeye/blog/712415我们知道要让TextView 解析和显示Html 代码。
可以使用Spanned text = Html.fromHtml(source);tv.setText(text);来实现,这个用起来简单方便。
但是,怎样让TextView 也显示Html 中image 节点的图像呢?我们可以看到fromHtml 还有另一个重构:fromHtml(String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)实现一下ImageGetter 就可以让图片显示了:ImageGetter imgGetter = new Html.ImageGetter() { @Override public Drawable getDrawable(String source) { Drawable drawable = null; drawable = Drawable.createFromPath(source); // Or fetch it from the URL // Important drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable .getIntrinsicHeight()); return drawable; }};至于TagHandler,我们这里不需要使用,可以直接传null。
AndroidTextView添加下划线的⼏种⽅式⼩编推荐总结起来⼤概有5种做法:1. 将要处理的⽂字写到⼀个资源⽂件,如string.xml(使⽤html⽤法格式化)2. 当⽂字中出现URL、E-mail、电话号码等的时候,可以将TextView的android:autoLink属性设置为相应的的值,如果是所有的类型都出来就是android:autoLink="all",当然也可以在java代码⾥做,textView01.setAutoLinkMask(Linkify.ALL);3. ⽤Html类的fromHtml()⽅法格式化要放到TextView⾥的⽂字,与第1种⼀样,只是是⽤代码动态设置4. 设置TextView的Paint属性:tvTest.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG ); //下划线5. ⽤Spannable或实现它的类,如SpannableString来格式部分字符串。
另外附上⼀篇博客介绍:如果是在资源⽂件⾥:1、字符串资源中设置下划线属性<resources><string name="hello"><u>phone:0123456</u></string><string name="app_name">MyLink</string></resources>直接让TextView引⽤字符串资源的name即可。
2、TextView设置autoLink属性<TextView xmlns:android="/apk/res/android"android:id="@+id/text1"android:layout_width="match_parent"android:layout_height="match_parent"android:autoLink="all"android:text="@string/link_text_auto"/>如果是代码⾥:1、使⽤Html.fromHtml()TextView textView = (TextView)findViewById(_test);textView.setText(Html.fromHtml("<u>"+"0123456"+"</u>"));2、使⽤TextView的Paint的属性tvTest.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);//下划线tvTest.getPaint().setAntiAlias(true);//抗锯齿3、使⽤SpannableString类SpannableString content = new SpannableString(str);content.setSpan(new UnderLineSpan, 0, str.length(), 0);代码⾥⾯⾃定义超链接样式:TextView tv=new TextView(this);tv.setText(Html.fromHtml("<a href=\"/CAIYUNFREEDOM\">⾃定义的超链接样式</a>"));// 在单击链接时凡是有要执⾏的动作,都必须设置MovementMethod对象tv.setMovementMethod(LinkMovementMethod.getInstance());CharSequence text = tv.getText();if (text instanceof Spannable){int end = text.length();Spannable sp = (Spannable)tv.getText();URLSpan[] urls = sp.getSpans( 0 , end, URLSpan.class );SpannableStringBuilder style = new SpannableStringBuilder(text);style.clearSpans(); // should clear old spansfor (URLSpan url : urls){URLSpan myURLSpan= new URLSpan(url.getURL());style.setSpan(myURLSpan,sp.getSpanStart(url),sp.getSpanEnd(url),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);style.setSpan(new ForegroundColorSpan(0xFFFF0000), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);//设置前景⾊为红⾊ } tv.setText(style);}另外⼀篇⽂章中有⼏个具体的实例可以参考:看完的顺⼿点歌赞呗,谢谢⿎励!。
Android设置当TextView中的⽂字超过TextView的容量时
⽤省略号代替
有时候在ListView中显⽰Textview时由于长度过长⽽导致text会隔⾏显⽰,UI上看起来就⽐较的不友好。
官⽅提供了相关的实现单⾏显⽰的⽅法。
只需要下边的设置:
textview.setSingleLine();
textview.setEllipsiz(TextUtils.TruncateAt.valueOf("END"));
在xml中设置如下:
android:singleLine="true"
android:ellipsize="end"
中间的singleline设置为true,就可以实现单⾏,且省略号在最后,⽽ellipsize则是控制省略号的位置,分别有start(开
始),middle(中间),end(最后),marquee(跑马灯)。
以上所述是⼩编给⼤家介绍的Android设置当TextView中的⽂字超过TextView的容量时⽤省略号代替,希望对⼤家有所帮助,如果⼤家有任何疑问欢迎给我留⾔,⼩编会及时回复⼤家的!。
Android 中TextView 添加超链接1、使用android:autoLink="all" 只需在TextView中加入这个属性,而在TextView里面写的文字中包含网址、电话、email的会自动加入连接地址。
如:<TextView xmlns:android="/apk/res/android"android:id="@+id/text1"android:layout_width="match_parent"android:layout_height="match_parent"android:autoLink="all"android:text="@string/link_text_auto"/>2、使用<string name=””><a href=””></a></string>标签,建立超链接:如:<string name="link_text_manual"><b>text2:</b> This is some othertext, with a <a href="">link</a> specifiedvia an <a> tag. Use a \"tel:\" URLto <a href="tel:4155551212">dial a phone number</a>.</string>别忘了TextView t2 = (TextView) findViewById(R.id.text2);t2.setMovementMethod(LinkMovementMethod.getInstance());3、在java文件中使用HTML语言:如:TextView t3 = (TextView) findViewById(R.id.text3);t3.setText(Html.fromHtml("<b>text3:</b>Text with a "+ "<a href=\"\">link</a> "+ "created in the Java source code using HTML."));t3.setMovementMethod(LinkMovementMethod.getInstance());4、字符串截取方法SpannableString ss = new SpannableString("text4: Click here to dial the phone.");ss.setSpan(new StyleSpan(Typeface.BOLD), 0, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(new URLSpan("tel:4155551212"),13, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); TextView t4 = (TextView) findViewById(R.id.text4);t4.setText(ss);t4.setMovementMethod(LinkMovementMethod.getInstance());5、Android中我们为了实现文本的滚动可以在ScrollView中嵌入一个TextView,其实TextView自己也可以实现多行滚动的,毕竟ScrollView必须只能有一个直接的子类布局。
android textview 最多十个字-回复如何在Android中使用TextView来显示最多十个字?第一步:添加TextView到布局文件中在布局文件中添加一个TextView元素,并设置其属性以限制最多十个字的显示。
在XML布局文件中添加如下代码:xml<TextViewandroid:id="@+id/myTextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:maxLines="1"android:ellipsize="end"android:textSize="18sp" />在上述代码中,我们给TextView元素设置了maxLines属性为1,这样就限制了最多只能显示一行文本。
我们还设置了ellipsize属性为end,这样当文本超过十个字时,TextView中的文本末尾将会显示为省略号。
最后,我们设置了textSize属性为18sp,以便适当的显示文本字体大小。
第二步:在Java代码中找到并引用TextView在Java代码中找到并引用我们在XML布局文件中定义的TextView元素。
首先,在Activity的onCreate方法中添加以下代码:javaTextView myTextView = findViewById(R.id.myTextView);在上述代码中,我们使用findViewById方法根据TextView的id来引用该元素。
myTextView变量将会指向我们定义的TextView。
第三步:设置TextView的文本内容在需要设置TextView的文本内容的地方,使用以下代码:javaString text = "This is a sample text.";if(text.length() > 10) {text = text.substring(0, 10);}myTextView.setText(text);在上述代码中,我们首先定义了一个示例文本。
TextViewSpannableString使⽤之实现可点击超链接效果TextView SpannableString 使⽤之实现可点击超链接效果如果看到这⾥说明你对 TextView 已经有了⼀定的了解,⾄少已经使⽤过该控件显⽰⽂字过。
现在来实现⼀些复杂⼀点的效果。
1. 实现可点击的超链接我们在APP开发过程中会遇到这样的需求,例如:其中标记为下划线的为可点击,点击后⼀般是跳转⼀个⽹页(这个在这⾥不做讨论)。
⾯对这样的需求⾥可能已经知道TextView是可以添加下划线的,你的实现可能是:By Login, You agree to our Privicy Policy & Terms of use[TextView]----[TextView]--[TextView]---[TextView][By Login, You agree to our ][Privicy Policy][ & ][Terms of use]然后为可点击的TextView添加下划线,然后设置点击事件就ok了。
如果你满⾜于这,那么你可以继续往后看,看看只⽤⼀个TextView 如何实现。
2. 可点击的超链接(基础)为了介绍SpannableString,我们来⽤它实现⼀个简单的下划线并设置监听点击事件。
String clickString = "I Love Android!";SpannableString spannableString =new SpannableString(clickString);spannableString.setSpan(new ClickableSpan() {@Overridepublic void onClick(View widget) {Toast.makeText(getActivity(),"Love",Toast.LENGTH_SHORT).show();}},2,6,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);tv_tip.setText(spannableString);tv_tip.setMovementMethod(LinkMovementMethod.getInstance());3. 多个可点击的超链接(提⾼)这回就要使⽤⼀个新的类:SpannableStringBuilder。
ANDROID:TEXTVIEW支持的HTML标签——自定义标签——响应超链接Android中只支持下列html标签:Android TextView 支持的HTML标签∙<a href="...">∙<b>∙<big>∙<blockquote>∙<br>∙<cite>∙<dfn>∙<div align="...">∙<em>∙<font size="..." color="..." face="...">∙<h1>∙<h2>∙<h3>∙<h4>∙<h5>∙<h6>∙<i>∙<img src="...">∙<p>∙<small>∙<strike>∙<strong>∙<sub>∙<sup>∙<tt>∙<u>∙<br> // 换行</br>不可用那如果我们还要实现一些标签怎么办呢那则需要自己实现TagHandler接口了。
实现的概要说明:Step one 继承TagHandler接口Step Two 实现public void handleTag(boolean opening, String tag, Editable output,XMLReader xmlReader)接口被调用的过程:系统在解析html文本发现tag时调用一次如<html>接口传递的参数为handleTag(true,”html”,output , xmlReader )发现tag的闭合时,调用接口接口传递的参数为handleTag(false,”html”,output , xmlReader )下面是一个实际执行的例子给< strike> 标签中的文字加上横线public class MyHtmlTagHandler implements TagHandler {public void handleTag(boolean opening, String tag, Editable output,XMLReader xmlReader) {if(tag.equalsIgnoreCase("strike") || tag.equals("s")) {processStrike(opening, output);}}private void processStrike(boolean opening, Editable output) {int len = output.length();if(opening) {output.setSpan(new StrikethroughSpan(), len, len, Spannable.SPAN_MARK_MARK);} else {Object obj = getLast(output, StrikethroughSpan.class);int where = output.getSpanStart(obj);output.removeSpan(obj);if (where != len) {output.setSpan(new StrikethroughSpan(), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}}}private Object getLast(Editable text, Class kind) {Object[] objs = text.getSpans(0, text.length(), kind);if (objs.length == 0) {return null;} else {for(int i = objs.length;i>0;i--) {if(text.getSpanFlags(objs[i-1]) == Spannable.SPAN_MARK_MARK) {return objs[i-1];}}return null;}}}显示超链接,并响应事件public class HTMLIMGActivity extends Activity {private TextView tv_img;String html = "<h1>text3:</h1>"+"<font color='#00FF00'>the content is hehe</font><br>"+"<a href=''>link to google~~~</a>";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);tv_img = (TextView) findViewById(_img);URLImageParser p = new URLImageParser(tv_img, HTMLIMGActivity.this);Spanned htmlSpan = Html.fromHtml(html, p, null);Log.i("hehehe", "spannestring:"+htmlSpan);tv_img.setText(htmlSpan);tv_img.setMovementMethod(LinkMovementMethod.getInstance());//不加这句无法链接,点了无反应}}要想点击有反应,要注意下列事项:1:不能设置TextView的android:autoLink属性。
TextView使⽤详解极⼒推荐⽂章:欢迎收藏阅读五分钟,每⽇⼗点,和您⼀起终⾝学习,这⾥是程序员Android本篇⽂章主要介绍Android开发中的部分知识点,通过阅读本篇⽂章,您将收获以下内容:⼀、TextView 继承关系⼆、TextView 简单使⽤举例三、TextView 跑马灯效果四、TextView末尾省略号属性五、TextView 颜⾊、字体⼤⼩属性六、TextView位置属性七、TextView 包含图⽚超链背景垂直居中等属性⼀、TextView 继承关系TextView继承关系如下:ng.Object↳ android.view.View↳ android.widget.TextViewTextView官⽹api ⽂档如下:⼆、TextView 简单使⽤举例使⽤xml布局跟java代码动态设置TextView。
1. xml布局如下<LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/text_view_id"android:layout_height="wrap_content"android:layout_width="wrap_content"android:text="@string/hello" /></LinearLayout>2. java 代码中使⽤⽅法如下:public class MainActivity extends Activity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);final TextView helloTextView = (TextView) findViewById(R.id.text_view_id);helloTextView.setText(er_greeting);}}三、TextView 跑马灯效果TextView跑马灯效果使⽤⽅法如下:<TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:ellipsize="marquee"android:focusable="true"android:focusableInTouchMode="true"android:marqueeRepeatLimit="marquee_forever"android:scrollHorizontally="true"android:singleLine="true"android:text="⼀、跑马灯效果 eg:ellipsize 欢迎关注程序员Android 获取更多Android 开发资料、⼲货、学习视频!"android:textSize="16sp" />实现效果如下:四、TextView末尾省略号属性TextView末尾省略号属性实现如下:<TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:ellipsize="end"android:paddingBottom="10dp"android:paddingTop="10dp"android:singleLine="true"android:text="⼆、末尾省略号效果 eg: ellipsize 属性控制省略号的位置(开始中间结尾跑马灯) "android:textSize="16sp" />实现效果如下:五、TextView 颜⾊、字体⼤⼩属性TextView字体颜⾊、⼤⼩设置如下:<TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="三、字体颜⾊、字体⼤⼩ eg:textColor 红⾊ textSize 16sp"android:textColor="#F00"android:textSize="16sp" />实现效果如下:六、TextView位置属性TextView 位置居中属性设置如下:<TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center"android:paddingBottom="10dp"android:paddingTop="10dp"android:text="四、字体位置属性 eg:居中 "android:textColor="#FF6100"android:textSize="16sp" />实现效果如下:七、TextView 包含图⽚超链背景垂直居中等属性TextView 设置超链点击,左侧图⽚、垂直居中等属性如下:<TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:autoLink="email"android:background="@android:color/white"android:drawableLeft="@drawable/ic_launcher"android:gravity="center_vertical"android:linksClickable="true"android:text="五、\n1.左侧包含图⽚ drawableLeft \n2.背景颜⾊⽩⾊ background \n3. 邮箱超链: autoLink eg :1150580768@" android:textColor="@android:color/black"android:textSize="16sp" />实现效果如下:⾄此,本篇已结束,如有不对的地⽅,欢迎您的建议与指正。
Android文本显示:T extView更多请关注/cpfdpzcTextView用来显示文本,还可以显示链接学到的知识点:1.可以再xml中设置TextView的样式2.在代码里设置显示的效果下面的例子主要实现三种在TexTView中添加链接,和在代码中添加TextView样式;3.实例:1MainActivity.java2package com.textviewlink;34import android.app.Activity;5import android.os.Bundle;6import android.text.Html;7import android.text.method.LinkMovementMethod;8import android.view.Menu;9import android.widget.TextView;1011public class MainActivity extends Activity {12private TextView tv2 = null;13private TextView tv3 = null;1415@Override16protected void onCreate(Bundle savedInstanceState) {17super.onCreate(savedInstanceState);18 setContentView(yout.main);19 tv2 = (TextView)findViewById(2);20//设置tv2可点击必须加,不然不能点击21 tv2.setMovementMethod(LinkMovementMethod.getInstance());2223 tv3 = (TextView)findViewById(3);24//tv3 html代码实现连接25 tv3.setText(Html.fromHtml("方法三"+ "<a href=\"\">百度</a>"));26 tv3.setMovementMethod(LinkMovementMethod.getInstance());27 }2829@Override30public boolean onCreateOptionsMenu(Menu menu) {31 getMenuInflater().inflate(R.menu.activity_main, menu);32return true;33 }3435}main.xml36<?xml version="1.0"encoding="utf-8"?>37<LinearLayout xmlns:android="/apk/res/android"38android:layout_width="match_parent"39android:layout_height="match_parent"40android:orientation="vertical">4142<TextView43android:layout_width="match_parent"44android:layout_height="wrap_content"45android:text="@string/link1"46android:textSize="30px"47android:autoLink="all"/>48<!-- android:autoLink="all" 属性可以为所有类型添加链接 -->49<TextView50android:id="@+id/tv2"51android:layout_width="match_parent"52android:layout_height="wrap_content"53android:textSize="30px"54android:text="@string/link2"/>55<TextView56android:id="@+id/tv3"57android:layout_width="match_parent"58android:layout_height="wrap_content"59android:textSize="30px"/>60</LinearLayout>strings.xml61<?xml version="1.0"encoding="utf-8"?>62<resources>6364<string name="app_name">TextViewLink</string>65<string name="hello_world">Hello world!</string>66<string name="menu_settings">Settings</string>67<string name="link1">方法一点击</string>68<string name="link2">方法二<a href="">百度</a>69<a href="">google</a></string>70<!-- 在方法二当中,需要在MainActivity中使用setMovementMethod()来实现激活链接,否则不能点击 -->71</resources>4效果图:5.代码设置样式72package com.textview;7374import android.app.Activity;75import android.graphics.Color;76import android.os.Bundle;77import android.view.Menu;78import android.widget.TextView;7980public class MainActivity extends Activity {81private TextView tv1 = null;82@Override83protected void onCreate(Bundle savedInstanceState) {84super.onCreate(savedInstanceState);85 setContentView(yout.main);86 tv1 = (TextView)findViewById(1);87 tv1.setText("利用代码来设置Textview的显示样式");88 tv1.setTextColor(Color.BLUE);89 tv1.setTextSize(30);90 tv1.setBackgroundColor(Color.RED);91 tv1.setPadding(10, 10, 10, 10);92 tv1.setVisibility(0);93/*94 android view的setVisibility方法值有3个:95 1.View.VISIBLE,常量值为0,意思是可见的96 2.View.INVISIBLE,常量值是4,意思是不可见的97 3.View.GONE,常量值是8,意思是不可见的,并且不占用布局空间,就是根据值得不同显示效果也不同98 * */99 }100101@Override102public boolean onCreateOptionsMenu(Menu menu) {103// Inflate the menu; this adds items to the action bar if it is present. 104 getMenuInflater().inflate(R.menu.activity_main, menu);105return true;106 }107108}。
Android系列教程:TextView小组件的使用--附带超链接和跑马灯效果一:新建HelloTextView 工程新建一个Hello world详细步骤可以参见Android教程之三:第一个Android应用,HelloWorld。
创建设置如下:Project name:HelloTextViewBuild Target :android 2.2Application name:HelloTextViewPackage name:com.flysnowcreate Activity:HelloTextViewmin SDK 8然后运行该应用就可以看到TextView的效果,是显示一行字:“Hello World, HelloTextView!”,这是因为新建的Hello项目自带的一个TextView。
二:分析TextView组件TextView是Android中常用的组件之一,可以用他来显示文字,就像一个标签一样,或者你可以认为是html中的span。
对于TextView我们最关心的应该是怎么设置显示的文本,怎样设置字体的大小,字体的颜色,字体的样式,其实很简单,TextView中提供了大量的属性帮我们配置TextView。
1.修改xml配置文件实现。
我们修改main.xml如下:Xml代码< ?xml version="1.0" encoding="utf-8"?>< LinearLayout xmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent">< TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:textColor="#ff0000"android:textSize="24sp"android:textStyle="bold"android:text="@string/hello"/>< /LinearLayout>< ?xml version="1.0" encoding="utf-8"?>< LinearLayout xmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent">< TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:textColor="#ff0000"android:textSize="24sp"android:textStyle="bold"android:text="@string/hello"/>< /LinearLayout>这里增加了三个属性的设置,分别是android:textColor="#ff0000"设置字体为红色,android:textSize="24sp"设置字体为24sp, android:textStyle="bold"设置字体加粗,预览效果如下图:Android系列教程:TextView小组件的使用--附带超链接和跑马灯效果看到我们的TextView的内容已经变成红色,24sp大,加粗。
如何修改TextView链接点击实现(包含链接生成与点击原理分析)在TextView中的文本链接要支持跳转,嗯,这个好办,TextView本身是支持的,我们只用添加一项属性就可以搞定:android:autoLink="web"在添加后发现确实是有效果了。
但是如果我们不想使用系统默认的浏览器,而是想要这个地址跳入某个页面或者自己应用内的浏览器该怎么办呢?好,接下来就是我们要实现的步骤。
俗话说,知己知彼,百战不殆。
所以将我们的步骤分为两步:1.了解autoLink的实现。
2.修改autoLink的实现。
3.运行&测试了解autoLink的实现既然我们可以知道设置autoLink属性就可以实现链接的自动识别与跳转,那么我们就从autoLink开始分析。
打开TextView.Java,寻找autoLink的相关配置读取参数:case com.android.internal.R.styleable.TextView_autoLink:mAutoLinkMask = a.getInt(attr, 0);break;我们发现,与autoLink有关的是一个名为mAutoLinkMask的成员属性,那也就是说:所有与autoLink有关的配置都有这个成员属性脱不了干系。
那我们就可以在整个TextView的实现中寻找mAutoLinkMask的身影:public void append(CharSequence text, int start, int end) {if (!(mText instanceof Editable)) {setText(mText, BufferType.EDITABLE);}((Editable) mText).append(text, start, end);if (mAutoLinkMask != 0) {boolean linksWereAdded = Linkify.addLinks((Spannable) mText, mAutoLinkMask);if (linksWereAdded && mLinksClickable && !textCanBeSelected()) {setMovementMethod(LinkMovementMethod.getInstance());}}}...private void setText(CharSequence text, BufferType type,boolean notifyBefore, int oldlen) {...if (mAutoLinkMask != 0) {Spannable s2;if (type == BufferType.EDITABLE || text instanceof Spannable) {s2 = (Spannable) text;} else {s2 = mSpannableFactory.newSpannable(text);}if (Linkify.addLinks(s2, mAutoLinkMask)) {text = s2;type = (type == BufferType.EDITABLE) ? BufferType.EDITABLE : BufferType.SPANNABLE;/** We must go ahead and set the text before changing the* movement method, because setMovementMethod() may call* setText() again to try to upgrade the buffer type.*/mText = text;// Do not change the movement method for text that support text selection as it// would prevent an arbitrary cursor displacement.if (mLinksClickable && !textCanBeSelected()) {setMovementMethod(LinkMovementMethod.getInstance());}}}...}...@Overridepublic boolean onTouchEvent(MotionEvent event) {...if (touchIsFinished && mLinksClickable && mAutoLinkMask != 0 && textIsSelectable) {// The LinkMovementMethod which should handle taps on links has not been installed// on non editable text that support text selection.// We reproduce its behavior here to open links for these.ClickableSpan[] links = ((Spannable) mText).getSpans(getSelectionStart(),getSelectionEnd(), ClickableSpan.class);if (links.length > 0) {links[0].onClick(this);handled = true;}}...return superResult;}mAutoLinkMask出现的地方并不多,除了基本的get、set方法之外,它出现在了3个地方,分别是:append(CharSequence text, int start, int end)、setText(CharSequence text, BufferType type)和onTouchEvent(MotionEvent event)。
超简单实现TextView中某段文字超链接点击打开浏览器跳转到网页2015/01/21 5446 我想实现用一个TextView中间某一小段文字做成超链接,点击后能调用系统默认浏览器,跳转到指定网页这么一个功能。
自己先折腾了一下没搞定,又在网上看了很多资料,很多都说在代码中用什么Spanned、Html.fromHtml()之类的来设置TextView,搞得还挺复杂,然后在布局里给Textview里添加android:autoLink=“web”、android:linksClickable=“true”什么什么的,但各种方法我都试了,不知道为什么,居然全都是Shit!点击后还是没任何反应。
最后无奈还得上StackOverflow查了一下,结果找到正解了!而且竟然实现起来比绝大多数人说的方法都简单得多!废话不多说,我马上把实现方法贴在下面: 1)首先在strings.xml文件中直接写上TextView要显示的超链接文字,如下,超链接用html标签的写法来就行了 string name=“signup_agreeTerms” 我同意a href=“baidu/” 用户协议/a 中的所有内容/string 2)然后你得在布局中拥有一个这样的TextView,注意,不要再添加什么autoLink、linksClickable属性之类的 TextView android:id=“@+id/signup_txt_agreeTerms” android:layout_width=“wrap_content” android:layout_height=“wrap_content” android:text=“@string/signup_agreeTerms”/ 3)在你的Activity中,添加如下代码 TextView textview = (TextView) findViewById(R.id.signup_txt_agreeTerms); textview.setMovementMethod(LinkMovementMethod.getInstance()); //其实就这一句是关键这样就OK了,实在是太简单了……。
Android中Textview超链接实现⽅式TextView中的超链接可以通过⼏种⽅式实现:⼀、Html.fromHtml⽅式TextView,本⾝就⽀持部分的Html格式标签。
这其中包括常⽤的字体⼤⼩颜⾊设置,⽂本链接等。
使⽤起来也⽐较⽅便,只需要使⽤Html类转换⼀下即可: textView.setText(Html.fromHtml(str));代码如下:public class Test10Activity extends Activity {TextView textView ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_test10);textView = (TextView) findViewById(R.id.text);String webLinkText = "<a href='https://'> html超链接测试</a>" ;textView.setText(Html.fromHtml(webLinkText));}}这时候点击超链接并没有跳转效果,需要加上textView.setMovementMethod(LinkMovementMethod.getInstance());之后才会跳转。
这样点击之后会⽤默认浏览器打开url。
现在字体颜⾊和下划线是默认样式,修改字体颜⾊⽐较简单,可以直接⽤标签:String webLinkText ="<font color='#333333'><a href='https://' style='text-decoration:none; color:#0000FF'>html超链接测试</a>" ;但是想不借助其他类去掉下划线就没有办法了。
textview 解析富文本在Android中,TextView可以用于解析和显示富文本。
富文本是带有样式、链接、图片等丰富内容的文本。
要解析富文本,可以借助以下两种方法:1. 使用Html.fromHtml()方法:```javaString htmlText = "<b>Bold</b> <i>Italic</i> <u>Underline</u>";textView.setText(Html.fromHtml(htmlText));```Html.fromHtml()方法可以将包含HTML标签的文本转换为Spanned对象,然后使用TextView的setText()方法将其设置为富文本显示。
2. 使用SpannableStringBuilder:```javaSpannableStringBuilder builder = new SpannableStringBuilder();builder.append("Bold ");builder.setSpan(new StyleSpan(Typeface.BOLD), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);builder.append("Italic ");builder.setSpan(new StyleSpan(Typeface.ITALIC), 5, 11, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);builder.append("Underline ");builder.setSpan(new UnderlineSpan(), 12, 21, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);textView.setText(builder);```SpannableStringBuilder是一个可以构建富文本的类。
AndroidTextView和EditText属性详解TextView属性详解:autoLink设置 是否当⽂本为URL链接/email/电话号码/map时,⽂本显⽰为可点击的链接。
可选值(none/web /email/phone/map/all) android:autoText如果设置,将 ⾃动 执⾏输⼊值的拼写纠正。
此处⽆ 效果 ,在显⽰输⼊法并输⼊的时候起作⽤。
android:bufferType指定getText()⽅式取得的⽂本类别。
选项editable 类似于StringBuilder可追加字符,也就是说getText后可调⽤ app end⽅法设置⽂本内容。
spannable 则可在给定的字符区域使⽤样式,参见这⾥1、这⾥2。
android:capitalize设置英⽂字母⼤写类型。
此处⽆效果,需要弹出输⼊法才能看得到,参见Edit View 此属性说明。
android:cursorVisible设定光标为显⽰/隐藏,默认显⽰。
android:digits设置允许输⼊哪些字符。
如“1234567890.+-*/% ()” android:drawableBottom在text的下⽅输出⼀个drawable,如图⽚。
如果指定⼀个颜⾊的话会把text的背景设为该颜⾊,并且同时和background使⽤时覆盖后者。
android:drawableLeft在text的左边输出⼀个drawable,如图⽚。
android:drawablePadding设置text与drawable(图⽚)的间隔,与drawableLeft、 drawableRight、drawableTop、drawableBottom⼀起使⽤,可设置为负数,单独使⽤没有效果。
android:drawableRight在text的右边输出⼀个drawable。
android:drawableTop在text的正上⽅输出⼀个drawable。
androidtextview组件显⽰富⽂本信息android 中textview显⽰富⽂本信息具有以下⼏种⽅式:1,利⽤富⽂本标签,类似于html标签,如<b>,<font>,<img>等,不过不能直接作为textview.setText的参数值,⽽应该静html.fromHtml⽅法将这些⽂本转换为charsequence对象。
如果想要显⽰图⽚的时候,还需要实现imagegetter接⼝2,重写ondraw⽅法3,利⽤webview组件显⽰html页⾯4,textview中显⽰图⽚还可以使⽤imagespan对象,该对象⽤来封装bitmap对象,并通过spannableString对象封装imagespan对象,将其作为settext⽅法的参数。
⽅法1的代码如下:TextView tv = (TextView) this.findViewById();String html="<strong>我的测试</strong><img src=\"ic_launcher-web.png\"><img src=\"\">";CharSequence charSequence=Html.fromHtml(html,new ImageGetter(){@Overridepublic Drawable getDrawable(String arg0) {Drawable drawable=MainActivity.this.getResources().getDrawable(R.drawable.ic_launcher);//下⾯这句话不可缺少drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());return drawable;}},null);tv.setText(charSequence);}其中碰到img标签返回的drawable对象是由接⼝返回的值来决定,如果得到的是⽹络上的图像,那么显⽰的就是⽹络的图像。
Textview控件的基本用法一、什么是Textview控件?1. Textview控件是Android开发中常用的视图控件,用于显示文本内容,是用户界面设计中非常重要的组件之一。
2. Textview控件可以用来显示静态文本、动态文本、信息文本等,可以设置字体、颜色、大小、对齐方式等属性。
3. Textview控件可以单独使用,也可以与其他控件结合使用,如放置在ListView、RecyclerView等布局容器中显示列表数据。
二、Textview控件的基本属性1. 文本内容- 使用setText()方法设置要显示的文本内容,可以是字符串、字符序列、字符串资源等。
2. 文本样式- 可以设置文本的字体大小、颜色、加粗、斜体等样式属性,通过setTextSize()、setTextColor()、setTypeface()等方法实现。
3. 文本对齐- 可以设置文本的对齐方式,包括居中、靠左、靠右等,通过setGravity()方法实现。
4. 超信息文本- Textview控件支持显示超信息文本,可以通过setMovementMethod()方法设置文本的点击效果,并通过setLinkTextColor()方法设置信息文本的颜色。
5. 文本排版- 可以设置文本的行间距、段落间距等排版属性,通过setLineSpacing()、setLineHeight()等方法实现。
6. 文本排列- 可以设置文本在控件中的位置,包括居中、靠左、靠右等,通过setGravity()方法实现。
三、Textview控件的常见用法1. 显示静态文本- 使用setText()方法设置固定的文本内容,适用于显示固定不变的文本信息。
2. 显示动态文本- 可以通过代码动态生成文本内容,如从网络获取数据、用户输入等,然后使用setText()方法显示动态文本内容。
3. 显示超信息文本- 调用setMovementMethod()方法设置文本的点击效果,同时使用setLinkTextColor()方法设置超信息文本的颜色,可以显示超信息文本。
Android 中TextView 添加超链接
1、使用android:autoLink="all" 只需在TextView中加入这个属性,而在TextView里面写的文字中包含网址、电话、email的会自动加入连接地址。
如:
<TextView xmlns:android="/apk/res/android"
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:autoLink="all"
android:text="@string/link_text_auto"
/>
2、使用<string name=””><a href=””></a></string>标签,建立超链接:
如:
<string name="link_text_manual"><b>text2:</b> This is some other
text, with a <a href="">link</a> specified
via an <a> tag. Use a \"tel:\" URL
to <a href="tel:4155551212">dial a phone number</a>.
</string>
别忘了
TextView t2 = (TextView) findViewById(R.id.text2);
t2.setMovementMethod(LinkMovementMethod.getInstance());
3、在java文件中使用HTML语言:
如:
TextView t3 = (TextView) findViewById(R.id.text3);
t3.setText(Html.fromHtml("<b>text3:</b>Text with a "
+ "<a href=\"\">link</a> "
+ "created in the Java source code using HTML."));
t3.setMovementMethod(LinkMovementMethod.getInstance());
4、字符串截取方法
SpannableString ss = new SpannableString("text4: Click here to dial the phone.");
ss.setSpan(new StyleSpan(Typeface.BOLD), 0, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(
new URLSpan("tel:4155551212"),13, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); TextView t4 = (TextView) findViewById(R.id.text4);
t4.setText(ss);
t4.setMovementMethod(LinkMovementMethod.getInstance());
5、Android中我们为了实现文本的滚动可以在ScrollView中嵌入一个TextView,其实TextView自己也可以实现多行滚动的,毕竟ScrollView必须只能有一个直接的子类布局。
只要在layout中简单设置几个属性就可以轻松实现
<TextView
android:id="@+id/tvCWJ"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" <!--垂直滚动条-->
android:singleLine="false" <!--实现多行-->
android:maxLines="15" <!--最多不超过15行-->
android:textColor="#FF0000"
/>
当然我们为了让TextView动起来,还需要用到TextView的setMovementMethod方法设置一个滚动实例,代码如下
TextView tvAndroid123 = (TextView)findViewById(CWJ);
tvAndroid123.setMovementMethod(ScrollingMovementMethod.getInstance());
ad_link = (TextView) findViewById(R.id.ad_link);
ad_link.setText(Html.fromHtml("<a
href="\"mce_href="\"""+mURL.getLink()+"\">"+Html.fromHtml(mURL.getLabel()+"</a>"))); ad_link.setMovementMethod(LinkMovementMethod.getInstance());。