当前位置: 编程技术>移动开发
本页文章导读:
▪解决TextView排版自动换行有关问题 解决TextView排版自动换行问题
http://blog.sina.com.cn/s/blog_73615d370100zpt5.html今天忽然发现android项目中的文字排版参差不齐的情况非常严重,不得不想办法解决一下。经过研究之后,终于找到了te.........
▪ 上载2.1源码 下载2.1源码
1.配置环璄安装jdk (1)jdk5安装过程(android2.3之前的版本)for Froyo and older$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy main multiverse"$ sudo add-apt-repository "deb http://archive.ub.........
▪ Objective-c中@class跟#import Objective-c中@class和#import
http://wangzy-boy.iteye.com/blog/772873二者的区别在于:1.import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至.........
[1]解决TextView排版自动换行有关问题
来源: 互联网 发布时间: 2014-02-18
解决TextView排版自动换行问题
http://blog.sina.com.cn/s/blog_73615d370100zpt5.html
今天忽然发现android项目中的文字排版参差不齐的情况非常严重,不得不想办法解决一下。经过研究之后,终于找到了textview自动换行导致混乱的原因了----半角字符与全角字符混乱所致!一般情况下,我们输入的数字、字母以及英文标点都是半角,所以占位无法确定。它们与汉字的占位大大的不同,由于这个原因,导致很多文字的排版都是参差不齐的。对此我找到了两种办法可以解决这个问题:
1. 将textview中的字符全角化。即将所有的数字、字母及标点全部转为全角字符,使它们与汉字同占两个字节,这样就可以避免由于占位导致的排版混乱问题了。 半角转为全角的代码如下,只需调用即可。
2. 去除特殊字符或将所有中文标号替换为英文标号。利用正则表达式将所有特殊字符过滤,或利用replaceAll()将中文标号替换为英文标号。则转化之后,则可解决排版混乱问题。
解决之前层次不齐的排版截图:
解决之后的整齐排版,如下图:
http://blog.sina.com.cn/s/blog_73615d370100zpt5.html
今天忽然发现android项目中的文字排版参差不齐的情况非常严重,不得不想办法解决一下。经过研究之后,终于找到了textview自动换行导致混乱的原因了----半角字符与全角字符混乱所致!一般情况下,我们输入的数字、字母以及英文标点都是半角,所以占位无法确定。它们与汉字的占位大大的不同,由于这个原因,导致很多文字的排版都是参差不齐的。对此我找到了两种办法可以解决这个问题:
1. 将textview中的字符全角化。即将所有的数字、字母及标点全部转为全角字符,使它们与汉字同占两个字节,这样就可以避免由于占位导致的排版混乱问题了。 半角转为全角的代码如下,只需调用即可。
/** * 半角转换为全角 * * @param input * @return */ public static String ToDBC(String input) { char[] c = input.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] == 12288) { c[i] = (char) 32; continue; } if (c[i] > 65280 && c[i] < 65375) c[i] = (char) (c[i] - 65248); } return new String(c); }
2. 去除特殊字符或将所有中文标号替换为英文标号。利用正则表达式将所有特殊字符过滤,或利用replaceAll()将中文标号替换为英文标号。则转化之后,则可解决排版混乱问题。
/** * 去除特殊字符或将所有中文标号替换为英文标号 * * @param str * @return */ public static String stringFilter(String str) { str = str.replaceAll("【", "[").replaceAll("】", "]") .replaceAll("!", "!").replaceAll(":", ":");// 替换中文标号 String regEx = "[『』]"; // 清除掉特殊字符 Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(str); return m.replaceAll("").trim(); }
解决之前层次不齐的排版截图:
解决之后的整齐排版,如下图:
1 楼
2006her
2012-03-09
遇到同样问题的路过,这个bug实在是恶心,感谢楼主分享。
2 楼
xinqiqi123
2012-03-17
大神内否给个图片加载缓存源码,现在项目中的图片都需要缓存处理
3 楼
liufuning
2012-06-18
不行,我试了都没有反应
4 楼
liufuning
2012-06-18
奥巴马[E01A][E01A][E01A][E01F][E03B][E154][E03B][E154][E03B][E154]试了一下没反应
[2] 上载2.1源码
来源: 互联网 发布时间: 2014-02-18
下载2.1源码
1.配置环璄
安装jdk
(1)jdk5安装过程(android2.3之前的版本)for Froyo and older
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy main multiverse"
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy-updates main multiverse"
$ sudo apt-get update
$ sudo apt-get install sun-java5-jdk
(2)jdk6安装过程 for Gingerbread and newer
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
安装所需要的开发包
(1)如果是64位系统
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils xsltproc
(2)如果在Ubuntu 10.10下开发
$ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
(3)如果在Ubuntu 11.10下开发
$ sudo apt-get install libx11-dev:i386
(4)如果是32位操作系统
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
libxml2-utils xsltproc
到此环境配置完成
下面是下载源码
1.在主文件中新建bin文件
$ mkdir ~/bin
$ PATH=~/bin:$PATH
2.下载repo
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
3.初始化repo
(1)建立存放android源码的文件目录
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
(2)下载最新版本用
$ repo init -u https://android.googlesource.com/platform/manifest
注:如果想指定某一版本可以用-b
eg:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
4.终端输入repo sync
如果中间中断重新输入就可以了
编译源码
1.初始化
$ source build/envsetup.sh
或
$ . build/envsetup.sh
2.建一个模拟器
$ lunch full-eng
如果不知道类型直接输入lunch进行选择
3.$ make
这可能要等一段时间
4.启动模拟器
$emulator
1.配置环璄
安装jdk
(1)jdk5安装过程(android2.3之前的版本)for Froyo and older
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy main multiverse"
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy-updates main multiverse"
$ sudo apt-get update
$ sudo apt-get install sun-java5-jdk
(2)jdk6安装过程 for Gingerbread and newer
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
安装所需要的开发包
(1)如果是64位系统
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils xsltproc
(2)如果在Ubuntu 10.10下开发
$ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
(3)如果在Ubuntu 11.10下开发
$ sudo apt-get install libx11-dev:i386
(4)如果是32位操作系统
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
libxml2-utils xsltproc
到此环境配置完成
下面是下载源码
1.在主文件中新建bin文件
$ mkdir ~/bin
$ PATH=~/bin:$PATH
2.下载repo
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
3.初始化repo
(1)建立存放android源码的文件目录
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
(2)下载最新版本用
$ repo init -u https://android.googlesource.com/platform/manifest
注:如果想指定某一版本可以用-b
eg:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
4.终端输入repo sync
如果中间中断重新输入就可以了
编译源码
1.初始化
$ source build/envsetup.sh
或
$ . build/envsetup.sh
2.建一个模拟器
$ lunch full-eng
如果不知道类型直接输入lunch进行选择
3.$ make
这可能要等一段时间
4.启动模拟器
$emulator
[3] Objective-c中@class跟#import
来源: 互联网 发布时间: 2014-02-18
Objective-c中@class和#import
http://wangzy-boy.iteye.com/blog/772873
二者的区别在于:
1.import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你。
2.在头文件中, 一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称。 而在实现类里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。
3.在编译效率方面考虑,如果你有100个头文件都#import了同一个头文件,或者这些文件是依次引用的,如A–>B, B–>C, C–>D这样的引用关系。当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,这将耗费大量的时间。而是用@class则不会。
4.如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。
所以,一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。 在实现这个接口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来.
http://wangzy-boy.iteye.com/blog/772873
二者的区别在于:
1.import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你。
2.在头文件中, 一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称。 而在实现类里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。
3.在编译效率方面考虑,如果你有100个头文件都#import了同一个头文件,或者这些文件是依次引用的,如A–>B, B–>C, C–>D这样的引用关系。当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,这将耗费大量的时间。而是用@class则不会。
4.如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。
所以,一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。 在实现这个接口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来.
最新技术文章: