❶ android textview参差不齐怎么解决
解决方法一:
将textview中的字符全角化。即将所有的数字、字母及标点全部转为全角字符,使它们与汉字同占两个字节,这样就可以避免由于占位导致的排版混乱问题了。 半角转为全角的代码如下,只需调用即可。
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);
}
解决方法二:
去除特殊字符或将所有中文标号替换为英文标号。利用正则表达式将所有特殊字符过滤,或利用replaceAll()将中文标号替换为英文标号。则转化之后,则可解决排版混乱问题。
// 替换、过滤特殊字符
public static String StringFilter(String str) throws PatternSyntaxException{
str=str.replaceAll("【","[").replaceAll("】","]").replaceAll("!","!");//替换中文标号
String regEx="[‘’]"; // 清除掉特殊字符
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return m.replaceAll("").trim();
}
2、TextView在显示中文的时候标点符号不能显示在一行的行首和行尾,如果一个标点符号刚好在一行的行尾,该标点符号就会连同前一个字符跳到下一行显示。
解决方法:在标点符号后加一个空格。
3、一个英文单词不能被显示在两行中( TextView在显示英文时,标点符号是可以放在行尾的,但英文单词也不能分开 )。
4、如果要两行对其的显示效果:有两种方法
方法一:
修改Android源代码;将frameworks/base/core/java/android/text下的StaticLayout.java文件中的的如下代码:
if (c == ' ' || c == '/t' ||
((c == '.' || c == ',' || c == ':' || c == ';') &&
(j - 1 < here || !Character.isDigit(chs[j - 1 - start])) &&
(j + 1 >= next || !Character.isDigit(chs[j + 1 - start]))) ||
((c == '/' || c == '-') &&
(j + 1 >= next || !Character.isDigit(chs[j + 1 - start]))) ||
(c >= FIRST_CJK && isIdeographic(c, true) &&
j + 1 < next && isIdeographic(chs[j + 1 - start], false))) {
okwidth = w;
ok = j + 1;
if (fittop < oktop)
oktop = fittop;
if (fitascent < okascent)
okascent = fitascent;
if (fitdescent > okdescent)
okdescent = fitdescent;
if (fitbottom > okbottom)
okbottom = fitbottom;
}
去掉就可以了。去掉后标点符号可以显示在行首和行尾,英文单词也可以被分开在两行中显示。
方法二:
自定义View显示文本
网上就有达人采用自定义View来解决这个问题,我做了实验并总结了一下:
自定义View的步骤:
1)继承View类或其子类,例子继承了TextView类;
2)写构造函数,通过XML获取属性(这一步中可以自定义属性,见例程);
3)重写父类的某些函数,一般都是以on开头的函数,例子中重写了onDraw()和onMeasure()函数;
❷ android去掉字符串所有空格
在开发项目过程中,有时候请求接口时需要给服务器传递数据,而自己在输入框中输入的数据有可能会带有空格,这个空格有可能是首尾有空格,有可能是字符串中间有空格,而这个空格是必须去掉的,我们可以采用下边方式来去掉空格。
去掉首尾空格 - trim():
str.getText().toString().trim();
去掉所有空格 - replaceAll(" " , “”) ;
str.getText().toString().replaceAll(" " , “”) ;
❸ android字符串提取问题
Pattern.compile("(\\81..00\\+0)|\\82..00\\+0)|\\83..00\\+0)")
正则表达式问题
❹ android中array.tostring(num).replaceall("[\\[\\],
(需要替换的字符,替换的字符),这个语句就是字符串替换
❺ android 判断是否为正斜杠
android 中判断是否为正斜杠,可以使用正则表达式的形式来判断,可以进行替换,如下代码:
publicclassTest{
publicstaticvoidmain(String[]args){
Stringpath="D:\FTP\admin\bird.gif";
System.out.println(path);
//JAVA中正则表达式,用"\\"表示""
path=path.replaceAll("\\","/");
System.out.println(path);
}
}
不过在windows中文件的路径和linux的文件路径符号都不一样,有时候需要通过file类来获得系统的路径分隔符,来进行判断。
❻ Android怎么用正则表达式替换字符串某些字符
Strings1="www..com";
System.out.println(s1);
s1=s1.replaceAll("\.","/");
System.out.println(s1);
❼ Android开发常见异常与错误系列(一)
一、前言
这系列文章是自己在平时开发过程中遇到的问题。之前只是记在云笔记上面,现在整理一下,发出来共享。
ps:像那些什么没有注册Activity呀,权限呀等最基本的就不再赘述。
二、ADB连接异常
有时我们发现,即使自己从任务管理器里面把adb.exe给干掉了,但还是不行,这时,你就可以尝试以下操作:
[2014-07-30 17:09:11 - QtActivity] The connection to adb is down, and a severe error has occured.
[2014-07-30 17:09:11 - QtActivity] You must restart adb and Eclipse.
[2014-07-30 17:09:11 - QtActivity] Please ensure that adb is correctly located at ‘D:\InstallFile\AndroidDevelop\ADT\sdk\platform-tools\adb.exe’ and can be executed.
adb起动失败:
1,杀掉其它的adb.exe看,如果不行,
2,看sdk\tools路径下面有没有
hprof-conv.exe
如果有,则把它复制到sdk\platform_tools下
3,如果没有,刚看sdk\platform_tools下有没有
hprof-conv.exe
如果有,刚复制到tools下。
4,如果两者都没有,刚下一个
hprof-conv.exe
三、java.lang.IllegalStateException: Activity has been destroyed
这个异常在切换Fragment中比较容易出现,稍不注意就会出现如下异常:
FATAL EXCEPTION: main12-0909:20:14.689: E/AndroidRuntime(31223): java.lang.IllegalStateException: Activity has been destroyed12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1365)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)12-0909:20:14.689: E/AndroidRuntime(31223): at cn.com.topsky.community.tfd.DongTaiFragment.init(DongTaiFragment.java:209)12-0909:20:14.689: E/AndroidRuntime(31223): at cn.com.topsky.community.tfd.DongTaiFragment.onCreateView(DongTaiFragment.java:68)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)12-0909:20:14.689: E/AndroidRuntime(31223): at android.os.Handler.handleCallback(Handler.java:605)12-0909:20:14.689: E/AndroidRuntime(31223): at android.os.Handler.dispatchMessage(Handler.java:92)12-0909:20:14.689: E/AndroidRuntime(31223): at android.os.Looper.loop(Looper.java:154)12-0909:20:14.689: E/AndroidRuntime(31223): at android.app.ActivityThread.main(ActivityThread.java:4624)12-0909:20:14.689: E/AndroidRuntime(31223): at java.lang.reflect.Method.invokeNative(Native Method)12-0909:20:14.689: E/AndroidRuntime(31223): at java.lang.reflect.Method.invoke(Method.java:511)12-0909:20:14.689: E/AndroidRuntime(31223): atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)12-0909:20:14.689: E/AndroidRuntime(31223): atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)12-0909:20:14.689: E/AndroidRuntime(31223): at dalvik.system.NativeStart.main(Native Method)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
经查,说这个是当前android-support-v4版本的一个bug,因为在当fragment进行到detached状态时,它会重置它的内部状态。
然而,它并没有重置mChildFragmentManager.这导致在Fragment重新attach时,它(fragment)没有重新attachm childFragmentManager,从而引发了上面的异常.
解决方案:
在每个调用getChildFragmentManager()的fragment中复写onDetach()方法:
@OverridepublicvoidonDetach() {super.onDetach();try{Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");childFragmentManager.setAccessible(true);childFragmentManager.set(this,null);}catch(NoSuchFieldException e) {thrownewRuntimeException(e);}catch(IllegalAccessException e) {thrownewRuntimeException(e);}}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
四、java.lang.IllegalArgumentException: Illegal character in query at index
这个异常,在我们拼接请求参数时,可能会碰到,原因是里面的特殊字符转换异常。解决办法如下:
url转换问题
String url = baseUrl + “?” + “name=” + name + “&age=” + age;
url = url.replaceAll(“&”, “%26”);
url = url.replaceAll(” “, “%20”);
解释如下:
特殊符号替换符号
?%3F
&%26
|%124
=%3D
#%23
/%2F
+%2B
%%25
空格%20
五、eclipse连接小米2S调试程序的问题
虽然快2年没用过eclipse了,但这个问题还是贴出来,也许正好有正在用eclipse的同学遇到了此问题:
小米Mi2S连接到eclipse上无法识别。即使开启了调试模式,也无法识别.终于找到了一个可用的方法。
方法
用数据线连接手机和电脑。
打开手机拨号界面。
在拨号界面按 # #717717# # 自动就开启了。
在通知栏会出现一个 Diag USB port enable。
当然,应该是需要ROOT权限的。
这时候你的PC机会弹出安装设备驱动。
如果不成功,多插拔几次试试。
ok!安装完就搞定了!这时候打开eclipse就会在Driver里面看到你的手机了。
注意事项
在PC机上安装新硬件向导时候可能会遭遇到缺少dll文件,比如我就遇到缺少了WinUSBCoInstaller2.dll,这个问题。这时候就要去网上找找喽。这个东西分x64 和 x86的,注意不要搞错了!
如果先打开eclipse,再安装的话,可能导致eclipse挂掉,不明原因,可能是我机器配置不行。两次均有这种状况。所以建议先安装后再开eclipse。
❽ android textview怎么处理换行
你用string的replaceall()这个方法,把所有的数字都变成全角的,把所有的字母也变成 全角的,这样你的textview就整齐了
❾ android中获取文件名之后删除文件名中的下划线和数字
String filename = "_adgdfsf.txt";
filename = filename.replaceAll("_","");
filename = filename.replaceAll("\\d","");
❿ 为什么android在线程中请求网络数据会报错去掉线程就好了,有没有大神知道,急!!下面是加 了线程的代码
Toast.makeText(getApplicationContext(), result, 1).show();
本质是进行UI更新
需要在主线程下调用
网络访问的处理结果需要通过handler发送消息
然后在handler内对接收到的不同消息进行分别处理
handler是运行在主线程下, 可以进行UI更新