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

来源:互联网 发布:淘宝手办怎么验货拒签 编辑:程序博客网 时间:2024/05/20 10:20


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;}@Overrideprotected 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 {@Overrideprotected 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 stubIntent 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 stubsuper.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 stubsuper.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;@Overrideprotected 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
原创粉丝点击