- 在EditText中插入表情图片 (CharacterStyle&SpannableString) http://gundumw100.iteye.com/blog/904107
EditText通常用于显示文字,但有时候也需要在文字中夹杂一些图片,比如QQ中就可以使用表情图片,又比如需要的文字高亮显示等等,如何在android中也做到这样呢?
记得android中有个android.text包,这里提供了对文本的强大的处理功能。
添加图片主要用SpannableString和ImageSpan类:
Java代码 收藏代码
Drawable drawable = getResources().getDrawable(id); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); //需要处理的文本,[smile]是需要被替代的文本 SpannableString spannable = new SpannableString(getText().toString()+"[smile]"); //要让图片替代指定的文字就要用ImageSpan ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE); //开始替换,注意第2和第3个参数表示从哪里开始替换到哪里替换结束(start和end) //最后一个参数类似数学中的集合,[5,12)表示从5到12,包括5但不包括12 spannable.setSpan(span, getText().length(),getText().length()+"[smile]".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); setText(spannable);
60.viewpager中嵌套gridview
自定义带表情键盘 android 表情,软键盘冲突解决方案(仿微博等SNS应用) http://blog.csdn.net/jj120522/article/details/9825871
日历 android中ViewPager嵌套GridView引发的一系列UI卡顿不顺畅的问题 http://www.android100.org/html/201403/10/5840.html
Android UI开发篇之 ViewPager+九宫格布局 实现左右滑动 http://blog.csdn.net/janice0529/article/details/17335473
ViewPager+GridView实现宫格横向滑动切换 http://download.csdn.net/detail/yefengyulu/5433913
61.异常:java.lang.ClassCastException: android.view.ViewGroupLayoutParamscannotbecasttoandroid.view.ViewGroupMarginLayoutParams的终极解决方式
思路:从原来的View中直接获取LayoutParams。http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1117/1991.html
62.android4.0的edittext屏蔽输入法时候光标显示问题 通过反射解决 http://www.eoeandroid.com/thread-248276-1-1.html
if (android.os.Build.VERSION.SDK_INT <= 10) {
mEditText.setInputType(InputType.TYPE_NULL);
} else {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
try {
Class cls = EditText.class;
Method setSoftInputShownOnFocus;
setSoftInputShownOnFocus = cls.getMethod(“setSoftInputShownOnFocus”, boolean.class);
setSoftInputShownOnFocus.setAccessible(true);
setSoftInputShownOnFocus.invoke(mEditText, false);
} catch (Exception e) {
e.printStackTrace();
}
try {
Class cls = EditText.class;
Method setShowSoftInputOnFocus;
setShowSoftInputOnFocus = cls.getMethod(“setShowSoftInputOnFocus”, boolean.class);
setShowSoftInputOnFocus.setAccessible(true);
setShowSoftInputOnFocus.invoke(mEditText, false);
} catch (Exception e) {
e.printStackTrace();
}
}
63.自定义控件
getContext的使用
自定义android用户控件,使用回调函数实现自定义事件
64.如何获取到,EditView 的 粘贴复制呢(解决) 重写editview控件,onTextContextMenuItem 。http://www.eoeandroid.com/thread-61482-1-1.html
Android学习笔记之通过剪切板传递数据 http://www.it165.net/pro/html/201404/11599.html
Android EditText 取消复制粘贴剪贴功能 http://www.xuebuyuan.com/2038921.html
在API-11以上,也就是Android 3.0以上的版本,这个操作就无效了,需要用到以下方法:
editText.setCustomSelectionActionModeCallback(new ActionMode.Callback()
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
如何捕获Edittext的粘贴方法?http://www.apkbus.com/android-92944-1-1.html
65.android EditText插入字符串到光标所在位置
EditText mTextInput=(EditText)findViewById(R.id.input);//EditText对象
int index = mTextInput.getSelectionStart();//获取光标所在位置
String text="I want to input str";
Editable edit = mTextInput.getEditableText();//获取EditText的文字
if (index < 0 || index >= edit.length() ){
edit.append(text);
}else{
edit.insert(index,text);//光标所在位置插入文字
}
66.Android学习笔记:浅析自己的聊天系统的设计思想 http://www.android100.org/html/201406/09/22125.html
67.java 正则表达式(Invalid escape sequence (valid ones are \b \t \n \f \r \” \’ \ ) 请问是啥原因呢?
把你的里面的\全部替换为\即可
68.lineralayou 中的一个view需要指定在底部,只需要把其他的view的weight设为1即可
69.error
NewsCommentDetailActivity
01-20 11:35:28.990: E/AndroidRuntime(6166): java.lang.RuntimeException: Unable to instantiate application com.jetsun.hbfc.core.MyApplication: java.lang.NullPointerException
01-20 11:35:28.990: E/AndroidRuntime(6166): at android.app.LoadedApk.makeApplication(LoadedApk.java:508)
01-20 11:35:28.990: E/AndroidRuntime(6166): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4245)
01-20 11:35:28.990: E/AndroidRuntime(6166): at android.app.ActivityThread.access1400(ActivityThread.java:131)01?2011:35:28.990:E/AndroidRuntime(6166):atandroid.app.ActivityThreadH.handleMessage(ActivityThread.java:1288)
01-20 11:35:28.990: E/AndroidRuntime(6166): at android.os.Handler.dispatchMessage(Handler.java:99)
01-20 11:35:28.990: E/AndroidRuntime(6166): at android.os.Looper.loop(Looper.java:137)
01-20 11:35:28.990: E/AndroidRuntime(6166): at android.app.ActivityThread.main(ActivityThread.java:4866)
01-20 11:35:28.990: E/AndroidRuntime(6166): at java.lang.reflect.Method.invokeNative(Native Method)
01-20 11:35:28.990: E/AndroidRuntime(6166): at java.lang.reflect.Method.invoke(Method.java:511)
01-20 11:35:28.990: E/AndroidRuntime(6166): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-20 11:35:28.990: E/AndroidRuntime(6166): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-20 11:35:28.990: E/AndroidRuntime(6166): at dalvik.system.NativeStart.main(Native Method)
01-20 11:35:28.990: E/AndroidRuntime(6166): Caused by: java.lang.NullPointerException
01-20 11:35:28.990: E/AndroidRuntime(6166): at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:384)
01-20 11:35:28.990: E/AndroidRuntime(6166): at android.app.LoadedApk.getClassLoader(LoadedApk.java:327)
01-20 04:05:16.637: E/AndroidRuntime(1372): Process: com.jetsun.hbfc:webview, PID: 1372
01-20 04:05:16.637: E/AndroidRuntime(1372): java.lang.RuntimeException: Unable to instantiate application com.jetsun.hbfc.core.MyApplication: java.lang.IllegalStateException: Unable to get package info for com.jetsun.hbfc; is package not installed?
01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.LoadedApk.makeApplication(LoadedApk.java:561)
01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4491)
01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.ActivityThread.access1500(ActivityThread.java:144)01?2004:05:16.637:E/AndroidRuntime(1372):atandroid.app.ActivityThreadH.handleMessage(ActivityThread.java:1339)
01-20 04:05:16.637: E/AndroidRuntime(1372): at android.os.Handler.dispatchMessage(Handler.java:102)
01-20 04:05:16.637: E/AndroidRuntime(1372): at android.os.Looper.loop(Looper.java:135)
01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.ActivityThread.main(ActivityThread.java:5221)
01-20 04:05:16.637: E/AndroidRuntime(1372): at java.lang.reflect.Method.invoke(Native Method)
01-20 04:05:16.637: E/AndroidRuntime(1372): at java.lang.reflect.Method.invoke(Method.java:372)
01-20 04:05:16.637: E/AndroidRuntime(1372): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
01-20 04:05:16.637: E/AndroidRuntime(1372): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
01-20 04:05:16.637: E/AndroidRuntime(1372): Caused by: java.lang.IllegalStateException: Unable to get package info for com.jetsun.hbfc; is package not installed?
01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:410)
01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.LoadedApk.getClassLoader(LoadedApk.java:363)
01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.LoadedApk.makeApplication(LoadedApk.java:554)
70.解决eclipse闪退的办法 http://blog.csdn.net/ieicihc/article/details/9629991
方法1.最好解决办法:
删除文件 [workspace]/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi
方法2.在文件eclipse/configuration/config.ini末尾加上如下一行:
org.eclipse.swt.browser.DefaultType=mozilla
71.Android WebView的前进、后退、与刷新
mWebView.goBack(); //后退
mWebView.goForward();//前进
mWebView.reload(); //刷新
72.You must call removeView() on the child’s parent first
在做alertdialog是的时候报了这么一个错误:
java.lang.IllegalStateException:
The specified child already has a parent.
You must call removeView() on the child‘s parent first.
搞了许久,终于理解了。
et1 = (EditText)findViewById(R.id.editText1);
builder.setView(et1); -- AlertDialog.Builder builder
et1我写在了xml里面,这样报错,原因是一女不可二嫁。
et1的parent即是R.layout.main 又是AlertDialog。
自然就报错了要你removeView()了。
解决方法有两种
1.动态生成EditText
et1 = new EditText(this);
builder.setView(et1);
2. 放在另一个xml中,用inflater
LayoutInflater inflater = LayoutInflater.from(this);
View textEntryView = inflater.inflate(R.layout.test1, null);
et1 = (EditText)textEntryView.findViewById(R.id.editText1);
builder.setView(textEntryView ); 注意这里是textEntryView ,不是et1
73.
Activity切换动画无效(android:windowIsTranslucent)影响(android:windowAnimationStyle) http://blog.csdn.net/xuewater/article/details/36398803
style里面设置了android:windowIsTranslucent这个属性
74.
Android 解决程序启动时的黑屏问题 http://blog.csdn.net/fancylovejava/article/details/39643449
android 界面切换黑屏处理从A切换到B的过程中出现黑屏,可以在Manifest文件中改变B的theme,在theme里添加true,这样从A到B的过程中,因为B是透明的,所以背景就是A。这样的用户体验比较好
75.
atvity主题加透明属性 如下: true
在该atvtivity中使用webview。 webview中有videos,可以播放视频,点击视频全屏后,导致其上级fragmentactivity重新加载,导致内容空白。
76.打包过程中出现错误 Unexpected error while computing stack sizes:
java.lang.IllegalArgumentException] (Stack size becomes negative after instruction [12] invokevirtual #96 in [cn/jpush/android/a/a.()V])
解决办法: 如何在代码时混淆忽略 jpush-sdk-release.jar? http://www.xuebuyuan.com/1683269.html
请下载最新的proguard.jar, umeng官方最新的试了也是有问题,估计兼容型的不好吧,采用http://download.csdn.net/detail/msn465780/6625061这个 ok。
并替换你Android Sdk "tools\proguard\lib\proguard.jar"
在你的proguard.cfg加上代码:
-dontwarn
cn.jpush.**
-keep class cn.jpush.** { *; }
77.android eclipse设置的断点无效的解决方案
1.排除 Run——Skip All Breakpoints
2.排除断点无效的activity所在的进程是否是主进程。
78.极光推送富媒体
推送富媒体时,推送模版其实是通知,推送文件其实是自定义消息类型
通知 vs. 自定义消息 http://docs.jpush.cn/pages/viewpage.action?pageId=3309701
富文本页面 Javascript 回调API http://docs.jpush.cn/pages/viewpage.action?pageId=7536748
Rich Push 开发指南 http://docs.jpush.cn/pages/viewpage.action?pageId=7536799
79.内部跳转 Routable for Android
80.fjrefox firebug插件。chrome 自身F12都可以方便的查看并且编辑html
81 带有凭证的activity 必须在一个进程中。否则凭证会为空。还有一点在调试的时候,非主进程无法和主进程跳转调试。
82.apktool反编译过程中出现如下错误
Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:56)
at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:491)
at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.java:74)
at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.java:66)
at brut.androlib.Androlib.getResTable(Androlib.java:50)
at brut.androlib.ApkDecoder.getResTable(ApkDecoder.java:189)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:114)
at brut.apktool.Main.cmdDecode(Main.java:146)
at brut.apktool.Main.main(Main.java:77)
Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000
at brut.util.ExtDataInput.skipCheckInt(ExtDataInput.java:48)
at brut.androlib.res.decoder.StringBlock.read(StringBlock.java:44)
at brut.androlib.res.decoder.ARSCDecoder.readPackage(ARSCDecoder.java:102)
at brut.androlib.res.decoder.ARSCDecoder.readTable(ARSCDecoder.java:83)
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:49)
... 8 more
由于使用新的adt,而反编译的apktool.jar不是最新的导致。使用新的apktool.jar替换原来的就可以了。官方下载地址 https://code.google.com/p/android-apktool/。
83.渠道打包工具
84.
https://www.genymotion.com/#!/developers/user-guide#license
http://blog.csdn.net/langyuewu/article/details/39196653
需要翻墙。部分需要付费
85.
使用Vitamio打造自己的Android万能播放器
86.
Ctrl+Shift+F7 可以高亮当前元素在当前文件中的使用
Android Studio 如何提示函数用法? 先选中,然后按F2
87.
android 提供的很多List控件如 listview、gridview 默认都会显示一个fadingedge的东西,它在View的top和bottom处各显示一个渐变半透的阴影以达到更好的视觉效果,但是这个带来的副作用就是导致在性能不是那么强劲的机器上,一些listview,gridview的拖动会显得很不流畅,因为我们知道绘制带Alpha的图片是最耗时的。
我们的优化思路就是对这个fadingedge做一些修改,当view处于滚动状态时,通过接口setVerticalFadingEdgeEnabled(false)让其不显示fadingedge,当view处于静止状态时,通过接口setVerticalFadingEdgeEnabled(true)恢复显示fadingedge。以上的listview和gridview等控件都是继承与AbsListView,所以我们直接修改framework中的AbsListView.java文件,就可以达到系统级的改动效果了。
88.
从github上clone下来swipebacklayout
编译报错查看log为 android-studio llij.ide.plugins.PluginManager - null
修改方法
tasks.withType(Compile) { options.encoding = “UTF-8” }
改为
tasks.withType(JavaCompile) { options.encoding = “UTF-8” }
89.
Error:Execution failed for task ‘:hBFC:compileDebugNdk’.
NDK not configured.
Download the NDK from http://developer.android.com/tools/sdk/ndk/.Then add ndk.dir=path/to/ndk in local.properties.
(On Windows, make sure you escape backslashes, e.g. C:\ndk rather than C:\ndk)
90.Error:(8, 0) Could not find property ‘ANDROID_BUILD_SDK_VERSION’ on project ‘:ActionBar-PullToRefresh’.
dependencies {
compile ‘com.github.castorflex.smoothprogressbar:library:[email protected]’
}
解决方法
I think you should also import ‘SmoothProgressBar’ library in your project https://github.com/castorflex/SmoothProgressBar
91.
。@+id:宣告一個id值來識別控制項
。@id:透過id值引用控制項
。android:id:透過id值, 引用Android系統內部的資源
。?android:attr:引用Android預置定義樣式