• 14.安卓中踩过的坑(转)


    转载:http://www.jianshu.com/p/117d065685be

    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"
    }




  • 相关阅读:
    C#基础
    Mybatis
    Powerdesigner显示 表的comment、列的comment
    oracle多账套(用户)引用同一个账套的表或视图数据
    Python批量删除加密压缩包内指定文件脚本
    Dropdown 追加到 template 标签的子元素里
    C# POST GET请求方式汇总
    ECharts 引入中国地图和区域地图
    leetcode91解码
    新编辑距离
  • 原文地址:https://www.cnblogs.com/benchao/p/7613741.html
Copyright © 2020-2023  润新知