-
TextView
2016-01-12 16:18:59文本控件显示富文本(URL、不同大小、字体、颜色的文本)在TextView中预定义了一些类似HTML标签(不区分大小写),通过这些标签,我们可以使TextView控件显示不同的颜色、大小、字体的文字。 常见的标签如下: ...文本控件
显示富文本(URL、不同大小、字体、颜色的文本)
在TextView中预定义了一些类似HTML标签(不区分大小写),通过这些标签,我们可以使TextView控件显示不同的颜色、大小、字体的文字。
常见的标签如下:名称 描述 <font>
设置颜色和字体 ,只支持color和face两个属性 <big>
大号字体 <small>
小号字体 <i>
斜体 <b>
粗体 <tt>
等宽字体(Monospace) <br>
换行(行与行之间没有空行),相当于\n <p>
换行(行与行之间有空行),相当于\n\n. 对于带有标签的文本,直接使\n无法换行,只能使用 <br>
或者<p>
<a>
超链接 <img>
插入图像,只有一个src属性 虽然和HTML标签类似,但是并不具备HTML标签的全部功能。
不能将带有标签的字符串直接使用TextView.setText()的方法进行设置,需要使用Html.fromHtml()将带有标签的字符串转换成CharSequence对象,然后再使用TextView.setText()方法进行设置。
如果想要在显示的文本中将URL、Email、电话号码等特殊内容高亮显示,并在单击的时候触发相关的动作(URL会调用浏览器显示网址,电话号码会在拨号界面显示电话号),可以通过设置
<TextView>
标签的android.autoLink属性来实现名称 描述 none 不匹配任何链接(默认值) web 匹配Web网址 email 匹配Email phone 匹配电话号码 map 匹配映射地址 all 匹配所有的连接 Demo:
android:autoLink=”all”<!--用于显示不同颜色、字体、大小的文字--> <TextView android:id="@+id/id_tv_richText1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!--用于显示带URL地址、Email地址、电话号码的文字--> <TextView android:id="@+id/id_tv_richText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:autoLink="all"/>
public class RichTextViewAct extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rich_text_view); init(); } private void init() { TextView textView1 = (TextView) findViewById(R.id.id_tv_richText1); TextView textView2 = (TextView) findViewById(R.id.id_tv_richText2); String html = "<font color='red'>I Love Android</font><br>"; html += "<font color='#0000FF'><big><i>I Love Android</i></big></font><p>"; html += "<font color='@" + android.R.color.holo_green_dark + "'><tt><b><big><u>I Love Android</u></big></b></tt></font><p>"; html += "<big><a href='http://www.baidu.com'>百度</a></big>"; Log.e("html内容:", html); // 将预定义标签的字符串转换成CharSequence对象 CharSequence charSequence = Html.fromHtml(html); Log.e("charSequence:", charSequence.toString()); // 为第一个TextView设置文本 textView1.setText(charSequence); // 这行代码只管重要,没有,无法单击链接调用浏览器显示网页 textView1.setMovementMethod(LinkMovementMethod.getInstance()); // 第二个TextVie要显示的文本 StringBuffer sb = new StringBuffer(); sb.append("我的URL: http://www.baidu.com\n"); sb.append("我的Email: tttt@gmail.com\n"); sb.append("我的电话:12345678909"); textView2.setText(sb.toString()); textView2.setMovementMethod(LinkMovementMethod.getInstance()); } }
注意
在调用setText方法设置文本完成后,还需要调用 setMovementMethod方法设置一个MovementMethod对象。 由于本例中<a>
标签是链接,因此,需要使用LinkMovementMethod.getInstance()方法获得MovementMethod对象,该对象可以使单击浏览器时显示指定的网页,如果不设置MovementMethod对象,虽然可以正常显示a标签指定的链接,但是单击链接任何反应。在TextView中显示 表情图像和文字
<img>标签可以实现。
img标签只有一个src属性,该属性原则上应该指向一个图像地址或可以找到某个图像资源的唯一标识,但是系统并不会直接根据src属性所指的值自动获取和显示图像,需要开发人员解析。 解析src属性值的工作需要在ImageGetter对象的getDrawable方法中完成。
ImageGetter是个接口。使用过Html.fromHtml方法的如下重载形式会比较熟悉它。
public static Spanned fromHtml(String source,ImageGetter imageGetter ,TagHandler tagHandler);
fromHtml方法有如下三个参数:
- source:包含Html标签的字符串
- imageGetter:ImageGetter对象。当系统解析到img标签时就是调用ImageGetter对象的getDrawable方法,并将src属性传入getDrawable方法中。至于src属性值的具体含义,就要在getDrawable方法中确定了。 getDrawable方法返回的是一个Drawable对象。我们可以从res/drawable资源、SD卡或者网络获得资源,并封装成Drawable对象。
- tagHandler:TagHandler对象,这个参数使用的并不多。当系统处理每一个标签的时候都会调用该对象的handleTag方法,如果不是用该参数,可以设置为null.
Demo: 5张图片,存放在res/drawable文件夹下,在一个TextView中以不同的大小显示这5张图片,并在其中插入相应的文字。
由于无法直接使用文件名来引用res/drawable中的图像资源,我们使用反射技术从R.drawable类中通过图像资源名称获取对应的图像资源ID,实现的原理就是R.drawable类中的相应的资源ID变量名就是图像文件的文件名。
public class MultTextPicAct extends Activity { private TextView tv_textAndPic; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_mult_text_pic); initView(); } /** * 初始化视图 */ private void initView() { // 组件初始化 tv_textAndPic = (TextView) findViewById(R.id.id_tv_textAndPic); tv_textAndPic.setTextSize(20f); tv_textAndPic.setBackgroundColor(Color.WHITE); // 定义图文混编 String html = "图片1<img src='flag_mark_blue'/>图片2<img src='flag_mark_gray'/><p>"; html += "图片3<img src='tag_blue'/><br>"; html += "图片4<a href='http://www.baidu.com'><img src='tag_orange'/></a><p>"; html += "图片5<img src='tag_red'/>"; //使用Html.fromHtml()转换包含Html标签的文本,需要指定第二个参数 CharSequence charSequence = Html.fromHtml(html, new Html.ImageGetter() { @Override public Drawable getDrawable(String source) { // 装载图像资源 Drawable drawable = getResources().getDrawable(getResourceId(source)); // 第三个图片按50%等比压缩 ,其余按原大小显示 if ("tag_blue".equals(source)) { drawable.setBounds(0, 0, drawable.getIntrinsicWidth() / 2, drawable.getIntrinsicHeight() / 2); } else { drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); } return drawable; } }, null); tv_textAndPic.setText(charSequence); // 有<a>超链接标签,需设置LinkMovementMethod,否则点击无相应 tv_textAndPic.setMovementMethod(LinkMovementMethod.getInstance()); } /** * 利用反射从R.drawable类中通过图像资源名称获取对应的图像资源ID * * @param name 表示res/drawable中的图像文件名(不含扩展名) * @return 图像资源ID */ private int getResourceId(String name) { try { // 根据资源的ID变量名(也就是图像资源的文件名),获得Field字段 Field field = R.drawable.class.getField(name); // 取得并返回资源ID(静态变量)的值 return Integer.valueOf(field.get(null).toString()); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return 0; } }
注意:在getDrawable方法中获取到图像资源的drawable对象后,必须使用Drawable.setBounds方法设置图像的显示区域,否则显示区域的面积为0,也就不会在TextView中显示图像了。其中第三个图像等比缩小了50%,显示效果如下
单击链接弹出Activity
我们知道通过
<a>
标签以及TextView自动识别的特殊文本(网址 电话 Email等),这些都可以通过单击操作来触发不同的动作。虽然这些单击动作已经可以满足大部分的需求了,但是如果要想在单击链接的时候执行任意的自定义的动作,就需要学习下面的内容了。在Android中,Span表示一段文本的效果,例如链接形式,图像,带颜色的文本等。
所有的Span类都在android.text.style包中。Demo:
准备一个TextView,点击跳转到Activity。
我们使用SpannableString对象来设置Span。
SpannableString和SpannableBuilder的区别:SpannableString不允许修改文本,只允许设置Span,而SpannableBulilder既允许修改文本,也允许设置Span。
public class Jump2Activity extends Activity { private TextView tv_jump ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_jump2); initData(); } /** * 点击TextView弹出Activity */ private void initData() { tv_jump = (TextView)findViewById(R.id.id_tv_jump2Act); String text = "显示Activity"; // 将文本转换成SpannableString对象 SpannableString spannableString = new SpannableString(text); // 将text中的所有文本设置成ClickableSpan对象,并实现onClick方法 spannableString.setSpan(new ClickableSpan() { // 在onClick方法中可以编写单击链接时要执行的动作 @Override public void onClick(View widget) { startActivity(new Intent(Jump2Activity.this,JumpTerminalAct.class)); } },0,text.length() , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 设置控件显示内容 tv_jump.setText(spannableString); // 在点击链接时凡是要有执行的动作,都必须要设置MovementMethod对象 tv_jump.setMovementMethod(LinkMovementMethod.getInstance()); } }
方法说明setSpan 4个参数
public void setSpan(Object what, int start, int end, int flags) { super.setSpan(what, start, end, flags); }
第一个参数需要设置一个ClickableSpan对象
第二个和第三个参数表示要设置成Span的某段文本的起始位置和终止位置。
第四个参数是一个标志,在本例中设置成了Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,该标志在TextView中的意义不大,单在EditText控件中表示的含义:在当前Span效果的前后输入字符串时并不应用Span的效果。还有其他的几个值:
Spanned.SPAN_EXCLUSIVE_INCLUSIVE :在Span前面输入的字符不应用Span的效果,后面输入的字符应用Span的效果
Spanned.SPAN_INCLUSIVE_INCLUSIVE:在Span前面输入的字符应用Span的效果,后面输入的字符不应用Span的效果
Spanned.SPAN_INCLUSIVE_EXCLUSIVE:在Span前后输入的字符都应用Span的效果。
为指定文字添加背景
从上面的例子中我们可以总结出 设置字符串中的某个子字符串的样式(变成可单击的链接、设置字体等)步骤如下:
- 将字符串转换成SpannableString或者SpannableBuilder对象
- 获得要设置样式的子字符串在原字符串中的位置和子字符串后面的字符的位置,即start和end
- 创建一个Span对象(所有android.text.style包中的XXXSpan类创建的对象的统称,XXX标识URL、BackGround等类的前缀)
- 使用setSpan方法设置一个span对象,即将要设置样子的子字符串转换为Span对象
- 用处理完的SpannableString或者SpannableBuilder对象设置相应的控件(例如TextView、EditText、Button等)
在SDK的android.text.style有很多现成的Span对象,例如BackgroundColorSpan,该类的功能是设置指定字符串的背景色。
例如:TextView textView = (TextView)findViewById(R.id.textView); String text = "<没有背景><黄色背景>"; // 第一步:将字符串转换成为SpannableString对象 SpannableString s = new SpannableString(text); // 第二步:确定要设置的子字符串的star和end int start = 6 ; int end = 12 ; // 第三步: 创建BackgroundColorSpan对象 BackgroundColorSpan b = new BackgroundColor(Color.YELLOW); // 第四步:使用setSpan将指定的子字符串转换成BackgroundColorSpan对象 s.setSpan(b,start,end,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // 第五步:用SpannableString对象设置TextView控件 textView.setText(s);
BackgroundColorSpan只能够设置文字的背景色,为了更加的通用,自定义一个ColorSpan类,使其能够同时设置文字颜色和背景色(android.text.style.ForegroundColorSpan可以设置文字颜色,但并没有可以同事设置背景和文字颜色的Span类)。
如果需要处理链接动作,必须要继承ClickableSpan类,本例我们只是设置文字和背景颜色,并不需要处理任何动作,因此只需要从CharacterStyle类继承即可。事实上,ClickableSpan也是CharacterStyle的子类。
代码如下:
import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.text.SpannableString; import android.text.Spanned; import android.text.TextPaint; import android.text.style.BackgroundColorSpan; import android.text.style.CharacterStyle; import android.widget.TextView; import com.turing.base.R; public class AddBackgroundAct extends Activity { private TextView tv_addbBackground; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_background); initView(); } private void initView() { tv_addbBackground = (TextView) findViewById(R.id.id_tv_addBackground); String text = "<没有背景><黄色背景>\n\n<蓝色背景,红色文字>"; SpannableString spannableString = new SpannableString(text); int start = 6; int end = 12; BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.YELLOW); spannableString.setSpan(backgroundColorSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // <蓝色背景,红色文字> (每个 “\n”算一个长度) start = 14; end = text.length(); // 创建ColorSpan ColorSpan colorSpan = new ColorSpan(Color.RED, Color.BLUE); // 将文字转换为ColorSpan对象 spannableString.setSpan(colorSpan, start,end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); tv_addbBackground.setText(spannableString); TextView tv = (TextView)findViewById(R.id.id_tv_tv2); tv.setText("一整个字符串的普通的背景设置,文字颜色设置"); tv.setBackgroundColor(Color.GREEN); tv.setTextColor(Color.DKGRAY); } /** * 自定义Span类,可以同时设置文字颜色和背景色 */ class ColorSpan extends CharacterStyle { private int mTextColor; private int mBackgroundColor; public ColorSpan(int mTextColor, int mBackgroundColor) { this.mTextColor = mTextColor; this.mBackgroundColor = mBackgroundColor; } // 重写updateDrawState方法 @Override public void updateDrawState(TextPaint tp) { tp.bgColor = mBackgroundColor; tp.setColor(mTextColor); } } }
总结:
- 将android:autoLink的属性值设置为true,系统会自动识别E-mail、电话、网址等特殊文本
- 使用Html标签,例如
<font>
<img>
等,不要设置android:autoLink属性 - 在java代码中直接使用Span对象来设置文本样式。这种方法需要将文本转换成为一个SpannableString或者SpannableBuilder对象,然后在SpannableString或者SpannableBuilder对象中使用setSpan方法将需要设置样式的文本转换成相应的Span对象
- 在字符串资源中,使用
<a>
标签(仅支持a标签)设置可点击的链接,不要设置android:autoLink属性。例如
<string name="link_text"> <a href="tel:123456">打电话</a> </string>
然后在TextView标签中引用
..... android:text="@string/link_text"
带边框的TextView
两种方式:
- 编写一个继承TextView类的自定义控件,重写onDraw()绘制边框
- 使用9-patch(*.9.png)格式的图像作为TextView的背景图来设置边框(这个背景图需要有一个边框)
通过第一中方式实现:
public class BorderTextView extends TextView { public BorderTextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); // 设置所绘制的边框颜色为黑色 paint.setColor(Color.BLACK); // 绘制上边框 canvas.drawLine(0, 0, this.getWidth() - 1, 0, paint); // 绘制左边框 canvas.drawLine(0, 0, 0, this.getHeight() - 1, paint); // 绘制右边框 canvas.drawLine(this.getWidth() - 1, 0, this.getWidth() - 1, this.getHeight() - 1, paint); // 绘制下边框 canvas.drawLine(0, this.getHeight() - 1, this.getWidth() - 1, this.getHeight() - 1, paint); } }
XML:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.turing.base.activity.textViewAct.BorderTextView android:id="@+id/id_tv_borderTV" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:padding="10dp" android:gravity="center" android:text="自定义TextView绘制边框"/> </RelativeLayout>
设置行间距
如果TextView控件中显示了多行文本,会有一个默认的行间距。
如果要改默认的行间距,三种方法:- 布局文件中使用android:lineSpacingExtra 或者 android:lineSpacingMultiplier属性设置行间距。
android:lineSpacingExtra设置精确的行间距,例如
android:lineSpacingExtra="20dp"
android:lineSpacingMultiplier 属性设置的是默认行间距的倍数。
如果同时设置了这两个属性,以较大行间距为准。
- 使用Style资源设置行间距
- 使用setLineSpacing方法设置行间距。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#000"> <!--使用android:lineSpacingExtra属性设置行间距--> <TextView android:id="@+id/id_tv_lineSpace" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:layout_margin="10dp" android:background="#FFF" android:lineSpacingExtra="20dp" android:textColor="#000" android:text="第一行的文本\n第二行的文本(20dp)"/> <!--使用android:lineSpacingMultipile属性设置行间距--> <TextView android:id="@+id/id_tv_lineSpace2" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:layout_margin="10dp" android:background="#FFF" android:lineSpacingMultiplier="1.8" android:textColor="#000" android:text="第一行的文本\n第二行的文本(行间距是默认行间距的1.8倍)"/> <!--使用style定义行间距--> <TextView android:id="@+id/id_tv_lineSpace3" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:layout_margin="10dp" android:background="#FFF" style="@style/line_space" android:textColor="#000" android:text="第一行的文本\n第二行的文本(style设置的,行间距是默认行间距的1.5倍)"/> <!--使用代码设置--> <TextView android:id="@+id/id_tv_lineSpace4" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:layout_margin="10dp" android:background="#FFF" android:textColor="#000" android:text="第一行的文本\n第二行的文本(代码设置)"/> </LinearLayout>
<style name="line_space"> <item name="android:lineSpacingMultiplier">1.5</item> </style>
public class LineSpaceTextViewAct extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_line_space_text_view); TextView tv = (TextView)findViewById(R.id.id_tv_lineSpace4); tv.setLineSpacing(50,1.2f); } }
setSpacing 方法:
/** * Sets line spacing for this TextView. Each line will have its height * multiplied by <code>mult</code> and have <code>add</code> added to it. * * @attr ref android.R.styleable#TextView_lineSpacingExtra * @attr ref android.R.styleable#TextView_lineSpacingMultiplier */ public void setLineSpacing(float add, float mult) { if (mSpacingAdd != add || mSpacingMult != mult) { mSpacingAdd = add; mSpacingMult = mult; if (mLayout != null) { nullLayouts(); requestLayout(); invalidate(); } } }
第一个参数相当于 android:lineSpacingExtra属性,第二个参数相当于android:lineSpaceingMultiplier属性。系统会采用哪个参数作为最终的行间距,取决于哪个参数值所表示的行间距大了。
在未显示完的文本后面加省略号(…)
当文本内容太多的时候,控件一行显示不开的时候,系统默认的会在最后显示一个省略号(…)
通过android:ellipsize属性可以设置省略号的位置,当属性值为none的时候则不显示省略号,默认在对后面加省略号。
需要设置 android:singleLine=”true”
代码设置如下:
textView.setEllipsize(TextUtils.TruncateAt.END);
xml报文设置:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000" android:orientation="vertical"> <TextView android:id="@+id/id_tv_ignore1" android:layout_width="150dp" android:layout_height="wrap_content" android:background="#FFF" android:ellipsize="start" android:singleLine="true" android:layout_margin="10dp" android:text="维基百科的目标是建立拥有人类全部知识的百科全书" /> <TextView android:id="@+id/id_tv_ignore2" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FFF" android:ellipsize="middle" android:singleLine="true" android:layout_margin="10dp" android:text="维基百科的目标是建立拥有人类全部知识的百科全书dddddddddddddddddddddd" /> <TextView android:id="@+id/id_tv_ignore3" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FFF" android:ellipsize="end" android:singleLine="true" android:layout_margin="10dp" android:text="维基百科的目标是建立拥有人类全部知识的百科全书ddddddddddddddddddd" /> </LinearLayout>
用TextView实现走马灯的效果
- TextView必须要获取焦点 ( android:focusable=”true”
android:focusableInTouchMode=”true”)- android:ellipsize=”marquee”
- android:marqueeRepeatLimit
- android:singleLine=”true”
android:marqueeRepeatLimit=“marquee_forever”或者是大于0的整数,marquee_forever表示永远循环显示。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#FFF" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:text="李克勤(Hacken Lee),生于香港,籍贯广东新会崖西,中国香港歌手,演员,主持人" /> </LinearLayout>
垂直滚动TextView中的文本(让TextView出现滚动条)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000"> <TextView android:id="@+id/id_tv_scroll" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FFF" android:singleLine="false" android:maxLines="4" android:scrollbars="vertical" android:scrollbarStyle="outsideOverlay" android:scrollbarFadeDuration="2000" android:padding="10dp" android:text="周杰伦, 生于中华民国台北县林口乡,是台湾著名国语流行音乐男歌手、演员、导演及音乐创作人。 周杰伦于2000年正式出道并发行其个人首张同名国语专辑《Jay》,翌年凭借该张专辑获得第十二届台湾金曲奖“最佳流行音乐演唱专辑奖”ddddddddddddddddddddddddddddddddddddddddddddddd。"/> </RelativeLayout>
public class ScrollTextViewAct extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scroll_text_view); TextView textView = (TextView) findViewById(R.id.id_tv_scroll); textView.setMovementMethod(ScrollingMovementMethod.getInstance()); } }
android:scrollbars=”vertical” : 垂直滚动必须为vertical
android:scrollbarStyle=”outsideOverlay” :滚动条在文字的右侧显示。如果insideOVerlay滚动条会在右侧文字上显示(会覆盖文字的一部分)。
android:scrollbarFadeDuration=”2000” 滚动条从出现到消失(以渐变的方式)的时间,单位是毫秒 -
Android进阶(二十二)设置TextView文字水平垂直居中
2016-06-30 17:54:52设置TextView文字水平垂直居中 有2种方法可以设置TextView文字居中: 一:在xml文件设置:android:gravity="center" 二:在程序中设置:m_TxtTitle.setGravity(Gravity.CENTER); 备注:android:gravity和android:...设置TextView文字水平垂直居中
有2种方法可以设置TextView文字居中:
一:在xml文件设置:android:gravity="center"
二:在程序中设置:m_TxtTitle.setGravity(Gravity.CENTER);
备注:android:gravity和android:layout_gravity的区别在于前者对控件内部操作,后者是对整个控件操作。
例如:android:gravity="center"是对textView中文字居中
android:layout_gravity="center"是对textview控件在整个布局中居中
其实很容易理解,出现"layout"就是控件对整个布局的操作。
textView.setGravity(Gravity.CENTER);
以上只是实现文字布局的水平居中,若要同时实现垂直居中,还需要实现以下布局:
textView.setGravity(Gravity.CENTER_VERTICAL);
但是经过以上设置后,文本只是实现了水平居中,并未达到垂直居中的效果。
不过可以通过设置换行来达到美化效果。
textView.setText("\n\n\n暂无该商品评价信息");
美文美图
-
创建TextView
2017-09-18 08:06:56private void initdata() { for (int i=0;ititles.length;i++) { TextView textView = new TextView(this); textView.setText(titles[i]); textView.setTextSize(20); textprivate void initdata() { for (int i=0;i<titles.length;i++) { TextView textView = new TextView(this); textView.setText(titles[i]); textView.setTextSize(20); textView.setId(i+1000); textView.setOnClickListener(new Click()); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewPager.LayoutParams.WRAP_CONTENT, ViewPager.LayoutParams.WRAP_CONTENT); layoutParams.setMargins(20,10,20,10); if(i==0) { textView.setTextColor(Color.RED); }else { textView.setTextColor(Color.BLACK); } arr.add(textView); lin.addView(textView,layoutParams);//布局ID } } class Click implements View.OnClickListener { @Override public void onClick(View view) { int id = view.getId(); pager.setCurrentItem(id-1000); } }
-
swift TextView
2018-04-03 00:24:07let textView = UITextView(frame:CGRect(x:10,y:10,width:100,height:100)); //设置边框粗细 textView.layer.borderWidth = 1; //边框颜色 textView.layer.borderColor = UIColor.gray.cgCol...let textView = UITextView(frame:CGRect(x:10,y:10,width:100,height:100)); //设置边框粗细 textView.layer.borderWidth = 1; //边框颜色 textView.layer.borderColor = UIColor.gray.cgColor; self.view .addSubview(textView); //是否可编辑 textView.isEditable = false; //内容是否可选 textView.isSelectable = false; //属性font字体,字体颜色,textalignment:对齐方式 //给文字中电话和网址自动加上链接 textView.dataDetectorTypes = []//都不加链接 textView.dataDetectorTypes = .phoneNumber // 只有电话好吗 textView.dataDetectorTypes = .link // 网址 textView.dataDetectorTypes = .all //全加上 //给点选文字弹出的菜单中(全选,复制,后面加上自定义按钮) let mail = UIMenuItem(title:"邮件",action:#selector(ViewController.onMail)) let menu = UIMenuController(); menu.menuItems = [mail]; } @objc func onMail(){ print("我是加上的按钮点击事件") }
-
TextVIew折叠展示
2020-11-12 17:18:51TextView折叠展示一段文字 效果图 展开前 展开后 public class TextViewLinesUtils { /** * 设置textView结尾...后面显示的文字和颜色 * @param context 上下文 * @param textView textview * @param ... -
android textview 文字排版 换行
2012-04-16 23:58:06android textview 文字排版 换行 -
TextView的换行与行间距
2016-12-09 11:28:12textView -
获取textview行数
2020-03-09 17:48:56如果我们想获取TextView内容的行数,TextView没有提供现成的api供我们使用,需要我们自己获取。 这里提供一个间接的方法,通过StaticLayout来间接获取行数。 下面是代码: public static int getTextViewLines... -
Android自动滚动的TextView
2016-05-31 15:45:22Android自动滚动的TextView,源码里面有两个自定义的TextView,一个上下自动滚动,一个左右自动滚动,用起来都非常简单; -
textview加下划线
2019-02-12 16:31:50textview加下划线 -
自定义TextView属性和设置TextView属性
2017-07-20 14:57:00自定义的Textview 继承 自 TextView 有四个构造方法,传不同的参数 主要有下面几步来实现自定义属性: 1.自定义类中的属性,这个必须和attrs.xml 里面的属性一一对应起来 ,attrs.xml可以在values 包下进行创建,... -
TextView 使用详解
2019-06-20 17:10:46极力推荐文章:欢迎收藏Android 干货...一、TextView 继承关系 二、TextView 简单使用举例 三、TextView 跑马灯效果 四、TextView末尾省略号属性 五、TextView 颜色、字体大小属性 六、TextView位置属性 七、TextVie... -
Android TextView字体加粗
2017-05-18 10:20:28TextView textView = (TextView) findViewById(R.id.TextView01); textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); -
Android TextView中显示图片的4种方式
2016-03-17 11:28:55我们知道,TextView控件一般是用来显示文本的,而图片一般是用ImageView控件来显示。那TextView能否显示图片呢?答案是肯定的!下面列出常见的4种方式。 -
TextView字体加粗
2018-08-12 12:16:04TextView字体加粗 开发中常见的一种需求就是给字体加粗,Android中的实现方式有两种,一种是在xml中设置,一种是在代码中设置,但是这两种方式的效果不太一样,在代码中设置的加粗效果比较轻,xml中效果比较重。下... -
textView的编辑页面控制键盘和textView
2017-03-17 16:37:13textView的编辑页面控制键盘和textView这种编辑页面一般存在两个问题: 1. textView的frame为页面的bounds,这样点击编辑的时候,如果输入的字数很多,键盘就会遮挡到文字,用户就看不到这在输入的文字了。 2. ... -
一段话,TextView只能显示一行剩下的文字显示到另一个TextView,就是用多个TextView来显示到这一段话
2019-12-05 10:06:34一段话,TextView只能显示一行剩下的文字显示到另一个TextView,就是用多个TextView来显示到这一段话 -
android textview内容消失问题
2016-05-14 04:01:28我做了一个简单的fragment界面,主要是输入ID,然后向服务器查询内容后赋值回原来的界面上的textview,但是在运行的时候发生了一个奇怪的问题,一部分的textview消失了,具体很难描述,以下是整个过程的描述 ... -
Android TextView划线
2018-04-02 14:44:22/** * 下划线 * ... private void addButtomLine(TextView textView) { textView.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); } /** * 移除线 * * @param textView */ p... -
Android TextView根据textsize计算TextView的宽度和高度
2020-06-08 20:23:37在动态添加TextView过程中由于不知道长度和宽度,不方便设置初始值,所以就需要通过字体大小和字体个数来进行计算,然后得出TextView的宽和高,具体代码如下: 根据textsize就算出高度 public int getFontHeight... -
TextView使用大全
2016-04-08 01:45:18最近打算写一个系列的android初级开发教程,预计40篇以上的文章,结合我实际工作中的经验,写一些工作中...今天就从我们每天都会用到的TextView讲起. 1.设置背景颜色 <TextView android:layout_width="match_parent -
捕获TextView超链接
2015-10-03 22:18:17Android的TextView是个很强大的控件,通过Html类处理html文本后可以支持部分html标签。有时候需要捕获TextView中标签的点击事件进行自己的超链接点击处理,下面的代码用于捕获TextView中标签点击后的响应事件: ...