TextView主要是在android界面中实现文字说明等功能。主要实现功能如下: 1,显示丰富的文本(URL、字体大小、颜色等)
在TextView中预定了一些类似HTML的标签,通过标签可以使TextView控件显示不同颜色、大小、字体的文字。
<font>:设置颜色和字体
<big>:设置大小号
<small>:设置小号
<i>\<b>:斜体、粗体
<a>:链接地址
<img>:插入图片
使用这些标签可以用Html.fromHtml方法将这些标签的字符串转换成Charsequenece对象,然后在TextView中进行设置。
如果想在显示的文本中将URL地址、邮箱地址、电话产生超链接的效果可以使用android:autoLink来设置。
该属性如下:
![](https://img-blog.csdn.net/20140410205337046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbml1ZGFseQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
显示丰富文本
最终显示效果如下,显示的超链接可以链接到网络中:
完成步骤1,在values文件夹的string.xml中完成代码:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">显示html元素控件</string>
<string name="action_settings">Settings</string>
<color name="green">#00ff00</color>
<string name= "link_text"><a href="tel:8888888">打电话</a></string>
</resources>
设置颜色为green,设置超链接的一个标签href,完成电话功能
完成步骤2,在layout文件夹中的activity_main.xml中完成代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/textview1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="20sp" >
</TextView>
<TextView
android:id="@+id/textview2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:autoLink="all"
android:padding="20sp"
android:textSize="20sp"
android:text="@string/link_text">
</TextView>
</RelativeLayout>
padding 设置边距
设置文本autoLink为all,匹配所有链接
完成步骤3,在MainActivity.java中完成代码:
package com.example.android_textview;
import android.os.Bundle;
import android.app.Activity;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView textView1, textView2;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1 = (TextView) this.findViewById(R.id.textview1);
textView2 = (TextView) this.findViewById(R.id.textview2);
String html = "<font color = 'red'>enjoy android</font><br>";
html += "<font color='#0000ff'><big><i>enjoy android</i></big></font><p>";
html += "<big><a href='http://www.baidu.com'>百度</a></big>";
CharSequence charSequence = Html.fromHtml(html);
textView1.setText(charSequence);
textView1.setMovementMethod(LinkMovementMethod.getInstance());
String text = "\n\n\n我的URL : http://www.sina.com\n";
text += "\n\n\n我的eamil: wdzgoo@gmail.com\n";
text += "\n\n\n\n我的电话: + 86 0660-8887115";
textView2.setText(text);
textView2.setMovementMethod(LinkMovementMethod.getInstance());
}
}
添加html标志:
设置文字“enjoy“为red,第二个enjoy设置为0000ff颜色,大号字体,斜体,段落符
设置百度的超链接html += "<big><a href='http://www.baidu.com'>百度</a></big>";这条语句无法实现超链接,不解中。。
textView2.setMovementMethod(LinkMovementMethod.getInstance());实现超链接。
显示表情图像和文字
实现效果如下:
完成步骤一:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="#fff" />
</RelativeLayout>
完成步骤二:
选择5张图像放在androidbook\android_textview_qq\res\drawable-hdpi文件夹中,在activity_mail.xml中完成代码:
package com.example.android_textview_qq;
import java.lang.reflect.Field;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.text.Html;
import android.text.Html.ImageGetter;
import android.text.method.LinkMovementMethod;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
public int getResourceId(String name){
try{
Field field = R.drawable.class.getField(name);
return Integer.parseInt(field.get(null).toString());
}catch (Exception e){
}
return 0;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) this.findViewById(R.id.textview);
textView.setTextColor(Color.BLACK);
textView.setBackgroundColor(Color.WHITE);
textView.setTextSize(20);
String html = "图像1<img src='image1'/>图像2<img src='image2'/>图像3<img src='image3'/>";
html+="图像4<a href='http://www.baidu.com'><img src='image4'/>图像5<img src='image5'/>";
CharSequence charSequence = Html.fromHtml(html, new ImageGetter(){
public Drawable getDrawable (String source){
Drawable drawable = getResources().getDrawable(getResourceId(source));
if(source.equals("image3")){
drawable.setBounds(0,0,drawable.getIntrinsicWidth()/2,drawable.getIntrinsicHeight()/2);
}else{
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
}
return drawable;
}
},null);
textView.setText(charSequence);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
}
getResources()获得系统资源的信息,比如图片信息,返回给drawable对象。 if语句实现的是将第三个图片文件按照50%的比例进行压缩:实际宽度高度除以2。 对第五张图片实现点击超链接到百度网址,不过百度网址链接不出来,有待研究。。
单击链接弹出activity
实现效果如下,点击两个activity时分别显示其activity:
完成步骤一,在activity_main.xml中完成代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp" />
<TextView
android:id="@+id/textview2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:layout_marginTop="20dp" />
</RelativeLayout>
完成步骤二:MainActivity.java中完成代码:
package com.example.android_textview_activity;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) this.findViewById(R.id.textview);
TextView textView2 = (TextView) this.findViewById(R.id.textview2);
String text1 = "显示Activity1";
String text2 = "显示Activity2";
SpannableString spannableString = new SpannableString(text1);
SpannableString spannableString2 = new SpannableString(text2);
spannableString.setSpan(new ClickableSpan(){
public void onClick(View widget) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this,Activity1.class);
startActivity(intent);
}
}, 0, text1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString2.setSpan(new ClickableSpan(){
public void onClick(View widget){
Intent intent = new Intent(MainActivity.this,Activity2.class);
startActivity(intent);
}
}, 0, text2.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
textView2.setText(spannableString2);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView2.setMovementMethod(LinkMovementMethod.getInstance());
}
}
完成步骤三:新建两个activity文件,完成代码:
package com.example.android_textview_activity;
import android.app.Activity;
import android.os.Bundle;
public class Activity1 extends Activity {
public Activity1() {
// TODO Auto-generated constructor stub
}
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setTitle("Activity1");
}
}
package com.example.android_textview_activity;
import android.app.Activity;
import android.os.Bundle;
public class Activity2 extends Activity {
public Activity2() {
// TODO Auto-generated constructor stub
}
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setTitle("Activity2");
}
}
实现跑马灯效果
第一步:在layout文件夹中activity_main.xml文件中完成代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:background="#ffffff"
android:textColor="#000"
android:textSize="20dp"
android:focusableInTouchMode="true"
android:layout_margin="10dp"
android:padding="10dp"
/>
</RelativeLayout>
第二步,在src的MainActivity.java文件中完成代码:
package com.example.textview_show;
import android.os.Bundle;
import android.app.Activity;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView textView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1 = (TextView) this.findViewById(R.id.textview);
String html = "警惕!XP停服第一周 ,<a href='http://www.baidu.com'>“XP猎手”</a>木马假冒补丁来袭";
CharSequence charSequence = Html.fromHtml(html);
textView1.setText(charSequence);
textView1.setMovementMethod(LinkMovementMethod.getInstance());
}
}
代码分析:
android:singleLine="true"
控制显示行为单行,不显示单行则无法实现动态效果:
android:ellipsize="marquee"
跑马灯显示
android:marqueeRepeatLimit="marquee_forever"
循环显示跑马灯效果
android:focusable="true"
获取焦点功能。只有当TextView获取到焦点时,才能出现跑马灯效果
java文件:
textView1 = (TextView) this.findViewById(R.id.textview)
寻找xml文件中定义的id对象
CharSequence charSequence = Html.fromHtml(html);
使用CharSequence接口,表示字符的有序集合,并定义一些方法来测试。
textView1.setMovementMethod(LinkMovementMethod.getInstance());
设置移动方法(如方向键处理器)来为TextView服务,这个方法为空时,表示不允许用箭头键来移动光标或者滚动视图。