標籤:tpc uil hid str 中文 style 一般來說 失敗 add
轉載: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:[email protected]‘
* 自訂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"
}
14.安卓中踩過的坑(轉)