平常開發中碰到了各類開發問題,撿選了一部分分享出來。有些問題很是簡單,屬於編碼規範類,有些屬於特定狀況下碰到的問題,不是很常見。不太準確的地方,歡迎共同探討下~android
requestWindowFeature(Window.FEATURE_NO_TITLE);// 隱藏標題
複製代碼
須要在onCreate以前調用,不然在4.4.2的機型上會報錯:git
Calling startActivity() from outside of an Activity context requires the FLAG_NEW_TASK flag.web
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的)瀏覽器
titleTv.setTextColor(colorId);//錯誤的方式(常見封裝類調用)
titleTv.setTextColor(ContextCompat.getColor(context,colorId));//正確的方式
複製代碼
a.靜態/類全局變量須要單獨判斷; b.string 中文本空格效果沒法體現,給字符串加上雙引號緩存
<string name="Chinese"> 中 文 </string>
<string name="Chinese">" 中 文 "</string>
複製代碼
注意:使用Application.getString的方式,在切換語言後,並無切換這種方式引用的資源內容。能夠改成另外的activity裏面的getString方法獲取bash
ActivityManagerForce removing ActivityRecord{6dd5804 u0 包名/當前WebviewActivity t8819}: app died, no saved state
複製代碼
不支持onCustumView方法,去掉便可微信
android:textAllCaps="false"
複製代碼
TextView使用WrapContent,lines=1可是內容顯示不全 只能顯示在屏幕內的部分,在屏幕外的部分,在屬性動畫拉出來看的時候就沒有。 (這種問題發生在自定義跑馬燈控件時)app
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設置寬度。ide
三星 SM-C7000(C7) 6.0.1的系統就會出如今這個問題post
if(intent.resolve(context.getPackageManager))!=null){
...
}
複製代碼
使用隱式intent進行startActivity時,最好加上該種判斷和try catch,由於保不許哪一種機型就出問題了
getWindow().setBackgroundDrawableResource(R.drawable.widget_dialog_round_corner);
複製代碼
友盟分享連接若是內容中帶有紅包字樣,那麼圖片會失效顯示不出來(分享的主體卻是能夠本身看到)
阿里雲、應用寶的地址是會被攔截到使用小米手機系統自帶的下載器進行下載安裝,而這個下載器會默認使用迅雷下載組件,阿里雲的地址下載完畢後點擊下載完成的push會顯示文件沒法識別(而應用寶的地址能正常安裝),小米系及華爲應用的下載地址以及非.apk結尾的地址則會按照正常流程跳入瀏覽器進行下載。關閉小米手機上的迅雷下載組件的功能後,則能夠經過點擊push正常安裝,不會出現文件沒法識別的問題。 因此解決這個問題的很簡單,把下載地址換成非apk結尾的地址便可。
android:roundIcon="@mipmap/logo"
複製代碼
application中這個屬性也要設置
白屏的緣由是系統自己啓動是須要時間的(背景默認就是白色)。 通常作法:
設置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);
複製代碼
B應用打開A應用的cActivity時,A應用的其它Activity也會被打開(以前存在的,A應用一直在後臺) 這是taskAffinity的緣故,由於共用了同一個任務棧,因此在manifest文件中設置另一個任務棧便可:
android:taskAffinity=".payAct"
複製代碼
根據獲得網頁的高度來設置webview的高度。同時h5作好適配,等比縮放寬高。與此同時可能出現,獲取bitmap信息有空白的ui內容,這時候要作延遲獲取,由於onPageFinished方法只是拉取了代碼,並不表示頁面渲染完畢。
webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
複製代碼
設置爲NARROW_COLUMNS時,若是webview自己不是全屏的,則分享出去的圖片則不能鋪滿全屏。
Xml確定沒寫錯,可是爲啥高版本能夠,低版本就報錯呢?
這是由於圖片資源文件被放到了低版本文件夾中去了,因此高版本inflate不到。android:digits="0123456789"
複製代碼
經常使用來限定EditText的輸入格式。
緩存緣由
<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
複製代碼
ScrollView中添加:
android:fillViewport="true"
複製代碼
重啓清緩存,構建、提升版本都無效,緣由在於編碼不規範!
android:drawableTop="2dp" //錯誤代碼!!!
複製代碼
通常出現該中問題能夠比的下文件的history看看有哪些資源文件引用等不規範的地方,實在找不出就回退版原本看下。
是由於使用了contentTv.setText(Html.fromHtml(content)); 而不是直接的contentTv.setText(content); 前者的換行也沒用,也有可能由於其文本含有錯誤的HTML標籤文本的緣故,因此須要在使用時要考慮下兼容。