转载:http://www.jianshu.com/p/117d065685behtml
一、进度条ProgressBar的使用:android
好比在不须要自定义的状况下,显示响应的比例(eg:20/100),则可使用clip标签对drawable进行裁剪,在作进度条时颇有用。经过设置level值控制裁剪多少,level取值范围为0~10000,默认为0,表示彻底裁剪,图片将不可见;10000则彻底不裁剪,可见完整图片。看看clip标签能够设置的属性:
android:drawable 指定drawable资源,若是不设置该属性,也能够定义drawable类型的子标签;
android:clipOrientation 设置裁剪的方向,取值为如下两个值之一:git
horizontal 在水平方向上进行裁剪,条状的进度条就是水平方向的裁剪;github
vertical 在垂直方向上进行裁剪;json
android:gravity 设置裁剪的位置,可取值以下,多个取值用 | 分隔;缓存
top 图片放于容器顶部,不改变图片大小。当裁剪方向为vertical时,会裁掉图片底部;网络
bottom 图片放于容器底部,不改变图片大小。当裁剪方向为vertical时,会裁掉图片顶部;app
left 图片放于容器左边,不改变图片大小,默认值。当裁剪方向为horizontal,会裁掉图片右边部分;框架
right 图片放于容器右边,不改变图片大小。当裁剪方向为horizontal,会裁掉图片左边部分;ide
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时会裁剪左侧,其余状况会同时裁剪左右两侧。
二、使用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嵌套一层父亲容器。
三、Android闪屏处理:
从一个应用或者一个Activity跳转到另外一个应用或者另外一个Activity,若是要实现不出现闪屏,或者空白屏的现象,能够在清单文件里 给Activity添加属性:
style = "@android:style/Theme.NoDisplay",这样就能够彻底避免。
四、Android中ListView或Gridview 与 CheckBox控件的点击冲突
情形以下:图片上加一个CheckBox控件,在点击图片时会与checkBox的 监听事件冲突,致使点击图片无响应或没有跳转;
即:Gridview的 onClick 事件 或者 onItemClick事件 与 CheckBox控件的监听事件 发生冲突;
解决方法:
在布局中对CheckBox控件加上以下三句:
android:clickable="true"
android:focusable="false"
android:focusableInTouchMode="false"
五、 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就至关于限定了页面的字符
六、httpmime-4.1.3.jar和fastjson-1.2.8.jar冲突
在app下的build.gradle文件里添加:
packagingOptions {
exclude('META-INF/NOTICE.txt')
}
七、照相获取不到数据问题
在调用系统相机的时候,在照相的时候横屏,返回的时候竖屏,会调用onCreate方法,在调用系统的相机的activity清单文件中,添加 android:configChanges="orientaion|keyboardHidden",这样照相的时候就会是竖屏,就能够获得拍照的数据了。
八、关于图片引发的OOM问题
在文件夹drawable里不能放超过 1M的 图片,不然会报 内存溢出(OOM) 的异常,能够选择放在drawable-hdpi,甚至更大分辨率的图片文件夹下。
九、关于Android studio导入工程乱码问题
代码里中文显示正常,真机运行后中文显示乱码,解决办法: build.gradle中添加一句 android { compileOptions.encoding = "GBK" }