14.安卓中踩過的坑(轉)

來源:互聯網
上載者:User

標籤: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.安卓中踩過的坑(轉)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.