轉載: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" }