UI控件----TextView 实例总结


TextView主要是在android界面中实现文字说明等功能。主要实现功能如下:
1,显示丰富的文本(URL、字体大小、颜色等)
在TextView中预定了一些类似HTML的标签,通过标签可以使TextView控件显示不同颜色、大小、字体的文字。
<font>:设置颜色和字体
<big>:设置大小号
<small>:设置小号
<i>\<b>:斜体、粗体
<a>:链接地址
<img>:插入图片

使用这些标签可以用Html.fromHtml方法将这些标签的字符串转换成Charsequenece对象,然后在TextView中进行设置。
如果想在显示的文本中将URL地址、邮箱地址、电话产生超链接的效果可以使用android:autoLink来设置。
该属性如下:


显示丰富文本

最终显示效果如下,显示的超链接可以链接到网络中:

       


完成步骤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());实现超链接。

代码中出现的多个‘\n’换行符是为了避免文字的重叠效果,如果去掉会出现这样,不知道为什么:



显示表情图像和文字

实现效果如下:



完成步骤一:

<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>

 android:layout_margin="10dp",该属性设置相当于将下面4个属性都设置为10dp:



完成步骤二:
选择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服务,这个方法为空时,表示不允许用箭头键来移动光标或者滚动视图。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值