安卓中踩过的坑

1、进度条ProgressBar的使用:

比如在不需要自定义的情况下,显示响应的比例(eg:20/100),则可以使用clip标签对drawable进行裁剪,在做进度条时很有用。通过设置level值控制裁剪多少,level取值范围为0~10000,默认为0,表示完全裁剪,图片将不可见;10000则完全不裁剪,可见完整图片。看看clip标签可以设置的属性:

android:drawable 指定drawable资源,如果不设置该属性,也可以定义drawable类型的子标签;
android:clipOrientation 设置裁剪的方向,取值为以下两个值之一:

horizontal 在水平方向上进行裁剪,条状的进度条就是水平方向的裁剪;

vertical 在垂直方向上进行裁剪;

android:gravity 设置裁剪的位置,可取值如下,多个取值用 | 分隔;

top 图片放于容器顶部,不改变图片大小。当裁剪方向为vertical时,会裁掉图片底部;

bottom 图片放于容器底部,不改变图片大小。当裁剪方向为vertical时,会裁掉图片顶部;

left 图片放于容器左边,不改变图片大小,默认值。当裁剪方向为horizontal,会裁掉图片右边部分;

right 图片放于容器右边,不改变图片大小。当裁剪方向为horizontal,会裁掉图片左边部分;

center 图片放于容器中心位置,包括水平和垂直方向,不改变图片大小。当裁剪方向为horizontal时,会裁掉图片左右部分;当裁剪方向为vertical时,会裁掉图片上下部分;

fill 拉伸整张图片以填满容器的整个高度和宽度。这时候图片不会被裁剪,除非level设为了0,此时图片不可见;

center_vertical 图片放于容器垂直方向的中心位置,不改变图片大小。裁剪和center时一样;

center_horizontal 图片放于容器水平方向的中心位置,不改变图片大小。裁剪和center时一样;

fill_vertical 在垂直方向上拉伸图片以填满容器的整个高度。当裁剪方向为vertical时,图片不会被裁剪,除非level设为了0,此时图片不可见;

fill_horizontal 在水平方向上拉伸图片以填满容器的整个宽度。当裁剪方向为horizontal时,图片不会被裁剪,除非level设为了0,此时图片不可见;

clip_vertical 附加选项,裁剪基于垂直方向的gravity设置,设置top时会裁剪底部,设置bottom时会裁剪顶部,其他情况会同时裁剪顶部和底部;

clip_horizontal 附加选项,裁剪基于水平方向的gravity设置,设置left时会裁剪右侧,设置right时会裁剪左侧,其他情况会同时裁剪左右两侧。

2、使用Glide图片加载框架遇到的那些坑:

* Glide加载图片变绿
    * 原因,Glide默认加载图片的格式是DecodeFormat.PREFER_RGB_565 

,缺少ALPHA通道,导致加载图片变绿。
* 解决方案
Glide.setup(new GlideBuilder(context).setDecodeFormat(DecodeFormat.PREFER_ARGB_8888));

* Glide在弱网状态下加载大图片,失败几率很大。
    * 解决方案,配置自己的网络栈,
    * 前提:我用的是Retrofit2,其内部使用的是OkHttp3.
    * 配置

compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
* 自定义GlideModule
public class MyGlideModule implements GlideModule {
@Override
public void registerComponents(Context context, Glide glide) {
// 设置长时间读取和断线重连
OkHttpClient client = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.MINUTES).readTimeout(10, TimeUnit.MINUTES).retryOnConnectionFailure(true).build();
glide.register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(client));
}

@Override
public void applyOptions(Context context, GlideBuilder builder) {
// 防止图片变绿,在有ALPHA通道的情况下
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
}

}
* manifest的Application标签配置
<application>
<meta-data
android:name="com.example.admin.quwang.http.MyGlideModule"
android:value="GlideModule" >
</application>
* 在弱网状态下即可解决图片加载问题

* Glide的OOM
    * ImageView设置的ScaleType是fitxy,Glide会默认按照图片实际大小加载。而其他的模式按照的ImageView的大小。
    * 如果非要设置fitxy,那么使Glide.with(context).load().centerCrop().into();或者使用 Glide.with(context).load().fitCenter().into()

* Glide 和dataBinding共同使用的时候,根节点不能是ImageView。 

    * 原因:Glide加载图片时候为了防止图片错位会给ImageView设置Tag,而dataBinding的原理也是给View设置tag。这样就会导致类型转换异常
    * 解决方案:给ImageView嵌套一层父亲容器。

3、Android闪屏处理:

从一个应用或者一个Activity跳转到另一个应用或者另一个Activity,如果要实现不出现闪屏,或者空白屏的现象,可以在清单文件里 给Activity添加属性:
style = "@android:style/Theme.NoDisplay",这样就可以完全避免。

4、Android中ListView或Gridview 与 CheckBox控件的点击冲突

情形如下:图片上加一个CheckBox控件,在点击图片时会与checkBox的 监听事件冲突,导致点击图片无响应或没有跳转;

即:Gridview的 onClick 事件 或者 onItemClick事件 与 CheckBox控件的监听事件 发生冲突;

解决方法:

在布局中对CheckBox控件加上如下三句:
android:clickable="true"
android:focusable="false"
android:focusableInTouchMode="false"

5、 WebView loadData()中文乱码

一般来说 使用loadData(data,"text/html","utf-8")会导致乱码;

解决办法:loadData(data,"text/html","utf-8",null);

原因是:可以使用loadData,刷新只是从缓存里面取,但是在4.0以上的,如果按照API里所写的loadData(data, “UTF-8”, null);时会乱码,如果写成loadData(data, "text/html; charset=UTF-8", null);loadData最终的机制是会把传入的三个参数拼接在一起,然后再进行loadUrl操作,参数就是data, "text/html; charset=UTF-8", null这三个进行拼装,加入text/html; charset=UTF-8就相当于限定了页面的字符

6、httpmime-4.1.3.jar和fastjson-1.2.8.jar冲突

在app下的build.gradle文件里添加:
packagingOptions {
exclude('META-INF/NOTICE.txt')
}

7、照相获取不到数据问题

在调用系统相机的时候,在照相的时候横屏,返回的时候竖屏,会调用onCreate方法,在调用系统的相机的activity清单文件中,添加 android:configChanges="orientaion|keyboardHidden",这样照相的时候就会是竖屏,就可以得到拍照的数据了。

8、关于图片引起的OOM问题

在文件夹drawable里不能放超过 1M的 图片,否则会报 内存溢出(OOM) 的异常,可以选择放在drawable-hdpi,甚至更大分辨率的图片文件夹下。

9、关于Android studio导入工程乱码问题

代码里中文显示正常,真机运行后中文显示乱码,解决办法:
build.gradle中添加一句
android {
compileOptions.encoding = "GBK"
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,457评论 25 707
  • 概述 今天我们来探究一下android的样式。其实,几乎所有的控件都可以使用 background属性去引用自定义...
    CokeNello阅读 4,811评论 1 19
  • 转载自Keegan小钢并标明原文链接:http://keeganlee.me/post/android/20150...
    坚持编程_lyz阅读 1,112评论 0 1
  • 觉醒,就是把自己从过去的限制以及对未来的焦虑中解放出来,让自己更加彻底地活在当下时刻。很多人都在追求未来的成就,但...
    林锋Frank阅读 237评论 0 0
  • 1 上周六晚上,看了李雪的《遇见一个人》,自己感触特别深。为此,连夜写了一篇《现在的“执念”,往往都是童年被否定的...
    青鸟啾啾阅读 7,432评论 10 18