在我们开发app时,TextView一定是使用最多的控件了,android自带的TextView的功能也十分强大,但还是有些小的地方不能满足我们的需求,几天要说的这个功能也是开发中很常见的,就是,在我们显示一段超过屏幕宽度的 String时,TextView会自动换行,但系统默认的换行效果是顶起,而不是美工要求的居中。这时候,就需要我们对系统的TextView做一些改造,已使得换行后文字能够居中显示。

先看下效果图:

这种布局在IOS上很容易就实现了,android还的自定义一个View.

思路:在看android.text包中的源码时,发现几个从来没用到的类,包括:Layout,StaticLayout,DeynamicLayout等几个类,百度后得知这几个类的大概作用:

这三个Layout,就是用来对android的CharSequence及其子类进行布局的,为其传入不同的Alignment,就按照不同的Alignment去处理。代码很简单,只要从写TextView即可,代码如下:

package com.example.materialdesigndemo;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.text.Layout.Alignment;
import android.text.StaticLayout;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.widget.TextView;/*********************************************************** @文件名称:CenterTextView.java* @文件作者:rzq* @创建时间:2015年7月2日 上午10:12:16* @文件描述:换行居中显示TextView* @修改历史:2015年7月2日创建初始版本**********************************************************/
public class CenterTextView extends TextView
{private StaticLayout myStaticLayout;private TextPaint tp;public CenterTextView(Context context, AttributeSet attrs){super(context, attrs);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh){super.onSizeChanged(w, h, oldw, oldh);initView();}private void initView(){tp = new TextPaint(Paint.ANTI_ALIAS_FLAG);tp.setTextSize(getTextSize());tp.setColor(getCurrentTextColor());myStaticLayout = new StaticLayout(getText(), tp, getWidth(), Alignment.ALIGN_CENTER, 1.0f, 0.0f, false);}@Overrideprotected void onDraw(Canvas canvas){myStaticLayout.draw(canvas);}
}

使用:

<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" ><TextViewandroid:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_marginTop="30dp"android:text="最美的不是下雨天,是和你一起躲过雨的屋檐,美丽的画面。" /><com.example.materialdesigndemo.CenterTextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/text"android:layout_centerHorizontal="true"android:layout_marginTop="30dp"android:text="最美的不是下雨天,是和你一起躲过雨的屋檐,美丽的画面。" />
</RelativeLayout>

代码很简单,基本只需要重写onDraw()方法,让StaticLayout的实例去重新处理一下即可。这样处理后弊端就是,我们的CenterTextView只能显示文字,无法再显示drawableLeft等,如果需要,就需要在onDraw()方法中进行更复杂的处理。

Demo

android自定义换行居中CenterTextView相关推荐

  1. android 行居中,android自己定义换行居中CenterTextView

    在我们开发app时,TextView一定是使用最多的控件了,android自带的TextView的功能也十分强大.但还是有些小的地方不能满足我们的需求.几天要说的这个功能也是开发中非经常见的.就是,在 ...

  2. android多行文字正中间显示,Android自定义View五(绘制文本大小、多行多列居中)...

    一.绘制文本 在Canvas中绘制文本,使用前面文章的坐标系 1.drawText的几种方法 public void drawText (String text, float x, float y, ...

  3. Android 自定义View

    [Android 自定义View] Android 自定义View 自定义View基础 自定义TextView 继承View重写onDraw方法 View的构造方法 自定义属性 创建attrsxml文 ...

  4. android自定义view获取控件,android 自定义控件View在Activity中使用findByViewId得到结果为null...

    转载:http://blog.csdn.net/xiabing082/article/details/48781489 1.  大家常常自定义view,,然后在xml 中添加该view 组件..如果在 ...

  5. android代码实现手机加速功能,Android自定义View实现内存清理加速球效果

    Android自定义View实现内存清理加速球效果 发布时间:2020-09-21 22:21:57 来源:脚本之家 阅读:105 作者:程序员的自我反思 前言 用过猎豹清理大师或者相类似的安全软件, ...

  6. Android自定义圆形进度条

    Android自定义圆形进度条 github地址:https://github.com/opq1289/CircleProgressView 效果图: 无动画: 有动画: 整圆: 切割圆: 具体步骤: ...

  7. android 自定义flowlayout,Android 自定义ViewGroup之实现FlowLayout-标签流容器

    本篇文章讲的是Android 自定义ViewGroup之实现标签流式布局-FlowLayout,开发中我们会经常需要实现类似于热门标签等自动换行的流式布局的功能,网上也有很多这样的FlowLayout ...

  8. 自定义圆形倒计时Android,Android自定义View倒计时圆

    本文实例为大家分享了Android自定义View倒计时圆的具体代码,供大家参考,具体内容如下 创建attr 创建DisplayUtil 类 import android.content.Context ...

  9. Android自定义实现FlowLayout

    实现FlowLayout 何为FlowLayout,如果对Java的Swing比较熟悉的话一定不会陌生,就是控件根据ViewGroup的宽,自动的往右添加,如果当前行剩余空间不足,则自动添加到下一行. ...

  10. android fragment中引入自定义view_厉害了,用Android自定义View实现八大行星绕太阳3D旋转效果...

    作者:史蒂芬诺夫斯基 链接:https://www.jianshu.com/p/2954f2ef8ea5 好久没写View了,最近恰巧遇到一个八大行星绕太阳旋转的假3D效果,写完之后感觉效果还不错.能 ...

最新文章

  1. 人为何会发烧,超过42°C会怎样?
  2. HDU6141(最小树形图)
  3. GetHashCode() 的研究
  4. vbs复制自己到tmp目录
  5. QuickFIX/N入门
  6. 想尽快进入游戏开发行业的必经之路!
  7. 清华大学 现代软件工程 学生特别想学的领域
  8. java ftp获取文件名的方法_小猿圈Java学习-URL地址的组成格式
  9. 产业链消息称台积电积极寻求更多长期代工订单
  10. mysql php pdo 迭代器_php – 创建PDO迭代器
  11. 【Axure图标库】单线形图标元件库 细线矢量图标1000+
  12. JAVA - 手机扫描二维码,页面响应(不是扫码登录)
  13. 读书笔记-在工作中保持充沛的体力
  14. 【计算机基础04】Excel习题
  15. CCC产品认证的标准
  16. SpringCloud版本介绍
  17. opencv4.5.1 包含了BEBLID算子,一个新的局部特征描述符,超越ORB
  18. 无线网络-LTE (01) LTE Overview
  19. 尚硅谷_Redis6笔记
  20. [转载]GSview注册码

热门文章

  1. Java基础:MySQL
  2. Vue:vue项目npm安装animate.css后动画效果不起作用
  3. Go语言:运行代码报错main redeclared in this block previous declaration at .\test.go:5:6
  4. opencv程序在未安装opencv环境下运行方法总结
  5. 重磅!激光SLAM算法及框架概述
  6. 给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度
  7. 第3章 java的基本程序设计结构
  8. spring3: AOP 之 6.2 AOP的HelloWorld
  9. Struts2(三)
  10. JAVA SE、JAVA EE、JAVA ME的联系与区别