日常開發中碰到了各種開發問題,撿選了一部分分享出來。有些問題非常簡單,屬於編碼規範類,有些屬於特定情況下碰到的問題,不是很常見。不太準確的地方,歡迎共同探討下~
1.requestFeature() must be called before adding content
requestWindowFeature(Window.FEATURE_NO_TITLE);// 隱藏標題
複製程式碼
需要在onCreate之前呼叫,否則在4.4.2的機型上會報錯:
2.小米6.0系統開啟瀏覽器時閃退
Calling startActivity() from outside of an Activity context requires the FLAG_NEW_TASK flag.
public static void openBrowser(Context context, String url) {
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
複製程式碼
也就是要加上面的FLAG_ACTICITY_NEW_TASK(其它手機看到是ok的)
3.設定TextView的顏色值無效
titleTv.setTextColor(colorId);//錯誤的方式(常見封裝類呼叫)
titleTv.setTextColor(ContextCompat.getColor(context,colorId));//正確的方式
複製程式碼
4.國際化引用問題
a.靜態/類全域性變數需要單獨判斷; b.string 中文字空格效果無法體現,給字串加上雙引號
<string name="Chinese"> 中 文 </string>
<string name="Chinese">" 中 文 "</string>
複製程式碼
注意:使用Application.getString的方式,在切換語言後,並沒有切換這種方式引用的資源內容。可以改為另外的activity裡面的getString方法獲取
5.魅族7.0的系統在webview中點選後閃退
ActivityManagerForce removing ActivityRecord{6dd5804 u0 包名/當前WebviewActivity t8819}: app died, no saved state
複製程式碼
不支援onCustumView方法,去掉即可
6.button上的英文預設為大寫
android:textAllCaps="false"
複製程式碼
7.vivo上收到push後打不開指定的頁面(根本就沒反應)
系統會自動彈出,但是進入設定開啟即可。8.TextView顯示不全
TextView使用WrapContent,lines=1但是內容顯示不全 只能顯示在螢幕內的部分,在螢幕外的部分,在屬性動畫拉出來看的時候就沒有。 (這種問題發生在自定義跑馬燈控制元件時)
public static int getTextViewLength(TextView view, String text) {
TextPaint paint = view.getPaint();
int textLength = (int) Layout.getDesiredWidth(text, 0, text.length(), paint);
return textLength;
}
複製程式碼
然後給TextView設定寬度。
9. No Activity found to handle Intent { act=android.intent.action.VIEW_DOWNLOADS flg=0x10000000 }
三星 SM-C7000(C7) 6.0.1的系統就會出現在這個問題
if(intent.resolve(context.getPackageManager))!=null){
...
}
複製程式碼
使用隱式intent進行startActivity時,最好加上該種判斷和try catch,因為保不準哪種機型就出問題了
10.設定dialog邊角
getWindow().setBackgroundDrawableResource(R.drawable.widget_dialog_round_corner);
複製程式碼
11.三星機型報錯E/rsC++(16241): RS CPP error: Blur radius out of 0-25 pixel bound
大意就是TextView的shadowRadius不能大於25,是xml程式碼中的問題,改小shadowRadius即可。 包括button下的部分模糊的情況也是該問題導致的。12.分享連結至微信無法顯示連結的縮圖
友盟分享連結如果內容中帶有紅包字樣,那麼圖片會失效顯示不出來(分享的主體倒是可以自己看到)
13.小米手機上的App使用瀏覽器開啟尾綴帶apk的地址無法正常下載安裝
阿里雲、應用寶的地址是會被攔截到使用小米手機系統自帶的下載器進行下載安裝,而這個下載器會預設使用迅雷下載元件,阿里雲的地址下載完畢後點選下載完成的push會顯示檔案無法識別(而應用寶的地址能正常安裝),小米系及華為應用的下載地址以及非.apk結尾的地址則會按照正常流程跳入瀏覽器進行下載。關閉小米手機上的迅雷下載元件的功能後,則可以通過點選push正常安裝,不會出現檔案無法識別的問題。 所以解決這個問題的很簡單,把下載地址換成非apk結尾的地址即可。
14.桌面圖示不更換的原因
android:roundIcon="@mipmap/logo"
複製程式碼
application中這個屬性也要設定
15.優化開啟應用白屏問題
白屏的原因是系統本身啟動是需要時間的(背景預設就是白色)。 一般做法:
設定Theme
<style name="MNoActionBar" parent="Theme.AppCompat.NoActionBar">
<!--<item name="android:windowFullscreen">false</item>-->
<!--<item name="android:windowBackground">@drawable/welcome</item>//此行可以給window設定背景圖片,單獨設定此項不設定透明的話是沒有延遲開啟的情況(無白屏切換,和啟動頁使用同一資源則無縫切換,但預設是全屏的)-->
<item name="android:windowIsTranslucent">true</item>//設定透明之後不會有和頁面背景圖之間色值的閃爍,同時點選桌面圖示時會有些延遲進入頁面
</style>
複製程式碼
針對具體的activity:如果一個activity中既要顯示全屏的啟動圖,也要等到內容載入完畢後顯示最新內容(非全屏),那麼就應該對相關方法的進行判斷設定:
private void setFullScreenEnable(boolean isEnable) {
if (isEnable) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //隱藏狀態列
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //顯示狀態列
}
}
複製程式碼
如果在含有Webview的頁面中,則可以分別在onCreate方法和onpageFinished的回撥中進行設定即可。
特殊情況:如果整個頁面是載入的H5,即便使用了上面的設定,還是會有白屏一閃而過的情景。這是H5頁面本身渲染導致的,那麼目前的處理方法是針對啟動頁做個延時dismiss的效果,這樣就遮蓋了白屏一閃而過的瞬間:
fullLoadingView.postDelayed(new Runnable() {//需要做下延遲,否則會出現頁面一瞬間白屏的情況(應該是頁面渲染H5的原因)
@Override
public void run() {
fullLoadingView.setVisibility(View.GONE);
setFullScreenEnable(false);
}
}, 300);
複製程式碼
16.開啟外部應用時,多個頁面被調起
B應用開啟A應用的cActivity時,A應用的其它Activity也會被開啟(之前存在的,A應用一直在後臺) 這是taskAffinity的緣故,因為共用了同一個任務棧,所以在manifest檔案中設定另外一個任務棧即可:
android:taskAffinity=".payAct"
複製程式碼
17.獲取webview的bitmap
根據得到網頁的高度來設定webview的高度。同時h5做好適配,等比縮放寬高。與此同時可能出現,獲取bitmap資訊有空白的ui內容,這時候要做延遲獲取,因為onPageFinished方法只是拉取了程式碼,並不表示頁面渲染完畢。
webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
複製程式碼
設定為NARROW_COLUMNS時,如果webview本身不是全屏的,則分享出去的圖片則不能鋪滿全屏。
18.Error inflating class ImageView
Xml肯定沒寫錯,但是為啥高版本可以,低版本就報錯呢?
這是因為圖片資原始檔被放到了低版本資料夾中去了,所以高版本inflate不到。19.EditText digits屬性
android:digits="0123456789"
複製程式碼
常用來限定EditText的輸入格式。
20. android studio 全域性搜尋結果不全
快取原因
21. bottomSheetDialog設定圓角
<style name="BottomSheetDialog" parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/bottomSheetStyleWrapper</item>
</style>
<style name="bottomSheetStyleWrapper" parent="Widget.Design.BottomSheet.Modal">
<item name="android:background">@android:color/transparent</item>
</style>
new BottomSheetDialog(context,R.style.BottomSheetDialog)//設定style
複製程式碼
22.ScrollView中的LinearLayout的layout_weigt無效
ScrollView中新增:
android:fillViewport="true"
複製程式碼
23.Process 'command 'E:\android\tool\sdk\build-tools\26.0.3\aapt.exe'' finished with non-zero exit value 1
重啟清快取,構建、提高版本都無效,原因在於編碼不規範!
android:drawableTop="2dp" //錯誤程式碼!!!
複製程式碼
一般出現該中問題可以比的下檔案的history看看有哪些資原始檔引用等不規範的地方,實在找不出就回退版本來看下。
24.dialog中的TextView顯示不全的問題
是因為使用了contentTv.setText(Html.fromHtml(content)); 而不是直接的contentTv.setText(content); 前者的換行也沒用,也有可能因為其文字含有錯誤的HTML標籤文字的緣故,所以需要在使用時要考慮下相容。