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

这时候,就须要我们对系统的TextView做一些改造。已使得换行后文字可以居中显示。

先看下效果图:

这样的布局在IOS上非常easy就实现了,android还的自己定义一个View.

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

这三个Layout,就是用来对android的CharSequence及其子类进行布局的,为其传入不同的Alignment,就依照不同的Alignment去处理。代码非常easy,仅仅要从写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);

}

@Override

protected 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);

}

@Override

protected void onDraw(Canvas canvas)

{

myStaticLayout.draw(canvas);

}

}     使用:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_marginTop="30dp"

android:text="最美的不是下雨天。是和你一起躲过雨的屋檐,漂亮的画面。

" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@id/text"

android:layout_centerHorizontal="true"

android:layout_marginTop="30dp"

android:text="最美的不是下雨天。是和你一起躲过雨的屋檐,漂亮的画面。" />

代码非常easy,基本仅仅须要重写onDraw()方法。让StaticLayout的实例去又一次处理一下就可以。这样处理后弊端就是。我们的CenterTextView仅仅能显示文字。无法再显示drawableLeft等,假设须要,就须要在onDraw()方法中进行更复杂的处理。

android 行居中,android自己定义换行居中CenterTextView(示例代码)相关推荐

  1. android仿微信语音聊天功能,Android仿微信发送语音消息的功能及示例代码

    微信的发送语音是有一个向上取消的,我们使用ontouchlistener来监听手势,然后做出相应的操作就行了. 直接上代码: //语音操作对象 private mediaplayer mplayer ...

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

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

  3. android行高,android – GridView的行高

    如何使行高适合GridView中最高的项目? 因为默认情况下它是失败的. 更新: 这里是网格布局 android:layout_width="fill_parent" androi ...

  4. Android中给按钮同时设置背景和圆角示例代码

    前言 最近在做按钮的时候遇到在给按钮设置一张图片作为背景的同时还要自己定义圆角,最简单的做法就是直接切张圆角图作为按钮就可以了,但是如果不这样该怎么办呢,看代码: 下面来看效果图 一.先建一个圆角的s ...

  5. 【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50824912 相关地址介绍 : -- Universal I ...

  6. android 底部加载更多,android:ScrollView滑动到底部显示加载更多(示例代码)

    这是效果 主要是onTouchListener监听事件,监视什么时候滑到底部 同时要理解getMeasuredHeight和getHeight的区别 getMeasuredHeight:全部的长度 包 ...

  7. android camera2预览方向,Android Camera2预览偶尔会旋转90度(示例代码)

    我正在使用Android的Camera2 API开发一些应用程序.到目前为止,我已经能够在TextureView中显示预览.该应用程序默认为横向模式.使用模拟器时,预览将显示为颠倒.在我的物理Nexu ...

  8. android 行 64,android缺陷分析:内核空指针

    高通Android 7.1平台出现内核崩溃,log如下: (红色是关键信息) [ 65.862388] msm_isp_get_buf: bug mgr open cnt = 0 [ 65.87176 ...

  9. android拍照截图组件,Android截图命令screencap与视频录制命令screenrecord(示例代码)...

    查看帮助命令[email protected] ~$ adb shell screencap -v screencap: invalid option -- v usage: screencap [- ...

  10. android图片显示代码,Android图片处理:识别图像方向并显示(示例代码)

    在Android中使用ImageView显示图片的时候发现图片显示不正.方向偏了或者倒过来了. 解决问题非常自然想到的分两步走:1.自己主动识别图像方向,计算旋转角度. 2.对图像进行旋转并显示. 一 ...

最新文章

  1. 仿Twitter的公告效果
  2. kali 安装java jdk
  3. python整数类型进制表示_python2学习经验(一) 变量数据类型
  4. Android学习笔记---Timer的使用
  5. array DEMO
  6. JS实现Unix时间戳(Unix timestamp)转换工具-toolfk程序员工具网
  7. LeetCode MySQL 1164. 指定日期的产品价格 *
  8. Mac上emacs使用ggtags
  9. 任务提醒功能怎么实现
  10. 学会计为什么要学计算机基础,会计专业学生为什么要学数据库
  11. ChIP-seq数据处理流程(附赠长达5小时的视频指导)
  12. 菲涅耳衍射matlab,matlab – 两步菲涅耳衍射
  13. 计算机网络技术专业职业能力分析的结论与成效
  14. 【问题记录】git报错:[remote rejected] (pre-receive hook declined)
  15. Excel-VLOOKUP函数的进阶使用
  16. linux plt.show不显示图片,解决matplotlib库show()方法不显示图片的问题
  17. 【IEEE754制32位浮点数】与十进制相互转换
  18. Android 性能优化探究,不愧是Alibaba技术官
  19. 51单片机用c语言在液晶1602上显示汉字,lcd1602与单片机连接图,基于51单片机的lcd1602液晶显示屏连接电路图...
  20. 主要股东近3年净买入排名

热门文章

  1. 计算机毕业设计node+vue基于微信小程序的乐团团购系统的设计与实现
  2. python中文占几个字节_中文在python中占几个字节
  3. 软件项目管理系统-进度管理
  4. 如何在Pr中制作镂空字体?
  5. 传统车道线检测之黄白线、虚实车道线检测(附python代码)
  6. 【matlab 图像处理】图像锐化
  7. 手把手教学endnote设置毕业论文参考文献格式(特别完整)
  8. Python:操作HmailServer实现邮箱用户注册、收发邮件
  9. 计算机图片怎么截图快捷键,电脑系统截图快捷键(电脑怎么截图)
  10. 精通Java事务编程(3)-弱隔离级别之快照隔离和可重复读