日常開發(fā)中碰到了各種開發(fā)問題,撿選了一部分分享出來。有些問題非常簡單,屬于編碼規(guī)范類,有些屬于特定情況下碰到的問題,不是很常見。不太準(zhǔn)確的地方,歡迎共同探討下~
requestWindowFeature(Window.FEATURE_NO_TITLE);// 隱藏標(biāo)題
需要在onCreate之前調(diào)用,否則在4.4.2的機(jī)型上會報(bào)錯:
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(其它手機(jī)看到是ok的)
titleTv.setTextColor(colorId);//錯誤的方式(常見封裝類調(diào)用)
titleTv.setTextColor(ContextCompat.getColor(context,colorId));//正確的方式
a.靜態(tài)/類全局變量需要單獨(dú)判斷;
b.string 中文本空格效果無法體現(xiàn),給字符串加上雙引號
<string name="Chinese"> 中 文 </string>
<string name="Chinese">" 中 文 "</string>
注意:使用Application.getString的方式,在切換語言后,并沒有切換這種方式引用的資源內(nèi)容??梢愿臑榱硗獾腶ctivity里面的getString方法獲取
ActivityManagerForce removing ActivityRecord{6dd5804 u0 包名/當(dāng)前WebviewActivity t8819}: app died, no saved state
不支持onCustumView方法,去掉即可
android:textAllCaps="false"
系統(tǒng)會自動彈出,但是進(jìn)入設(shè)置打開即可。
TextView使用WrapContent,lines=1但是內(nèi)容顯示不全
只能顯示在屏幕內(nèi)的部分,在屏幕外的部分,在屬性動畫拉出來看的時候就沒有。
(這種問題發(fā)生在自定義跑馬燈控件時)
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設(shè)置寬度。
三星 SM-C7000(C7) 6.0.1的系統(tǒng)就會出現(xiàn)在這個問題
if(intent.resolve(context.getPackageManager))!=null){
...
}
使用隱式intent進(jìn)行startActivity時,最好加上該種判斷和try catch,因?yàn)楸2粶?zhǔn)哪種機(jī)型就出問題了
getWindow().setBackgroundDrawableResource(R.drawable.widget_dialog_round_corner);
大意就是TextView的shadowRadius不能大于25,是xml代碼中的問題,改小shadowRadius即可。
包括button下的部分模糊的情況也是該問題導(dǎo)致的。
友盟分享鏈接如果內(nèi)容中帶有紅包字樣,那么圖片會失效顯示不出來(分享的主體倒是可以自己看到)
阿里云、應(yīng)用寶的地址是會被攔截到使用小米手機(jī)系統(tǒng)自帶的下載器進(jìn)行下載安裝,而這個下載器會默認(rèn)使用迅雷下載組件,阿里云的地址下載完畢后點(diǎn)擊下載完成的push會顯示文件無法識別(而應(yīng)用寶的地址能正常安裝),小米系及華為應(yīng)用的下載地址以及非.apk結(jié)尾的地址則會按照正常流程跳入瀏覽器進(jìn)行下載。關(guān)閉小米手機(jī)上的迅雷下載組件的功能后,則可以通過點(diǎn)擊push正常安裝,不會出現(xiàn)文件無法識別的問題。
所以解決這個問題的很簡單,把下載地址換成非apk結(jié)尾的地址即可。
android:roundIcon="@mipmap/logo"
application中這個屬性也要設(shè)置
白屏的原因是系統(tǒng)本身啟動是需要時間的(背景默認(rèn)就是白色)。
一般做法:
設(shè)置Theme
<style name="MNoActionBar" parent="Theme.AppCompat.NoActionBar">
<!--<item name="android:windowFullscreen">false</item>-->
<!--<item name="android:windowBackground">@drawable/welcome</item>//此行可以給window設(shè)置背景圖片,單獨(dú)設(shè)置此項(xiàng)不設(shè)置透明的話是沒有延遲打開的情況(無白屏切換,和啟動頁使用同一資源則無縫切換,但默認(rèn)是全屏的)-->
<item name="android:windowIsTranslucent">true</item>//設(shè)置透明之后不會有和頁面背景圖之間色值的閃爍,同時點(diǎn)擊桌面圖標(biāo)時會有些延遲進(jìn)入頁面
</style>
針對具體的activity:如果一個activity中既要顯示全屏的啟動圖,也要等到內(nèi)容加載完畢后顯示最新內(nèi)容(非全屏),那么就應(yīng)該對相關(guān)方法的進(jìn)行判斷設(shè)置:
private void setFullScreenEnable(boolean isEnable) {
if (isEnable) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //隱藏狀態(tài)欄
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //顯示狀態(tài)欄
}
}
如果在含有Webview的頁面中,則可以分別在onCreate方法和onpageFinished的回調(diào)中進(jìn)行設(shè)置即可。
特殊情況:如果整個頁面是加載的H5,即便使用了上面的設(shè)置,還是會有白屏一閃而過的情景。這是H5頁面本身渲染導(dǎo)致的,那么目前的處理方法是針對啟動頁做個延時dismiss的效果,這樣就遮蓋了白屏一閃而過的瞬間:
fullLoadingView.postDelayed(new Runnable() {//需要做下延遲,否則會出現(xiàn)頁面一瞬間白屏的情況(應(yīng)該是頁面渲染H5的原因)
@Override
public void run() {
fullLoadingView.setVisibility(View.GONE);
setFullScreenEnable(false);
}
}, 300);
B應(yīng)用打開A應(yīng)用的cActivity時,A應(yīng)用的其它Activity也會被打開(之前存在的,A應(yīng)用一直在后臺)
這是taskAffinity的緣故,因?yàn)楣灿昧送粋€任務(wù)棧,所以在manifest文件中設(shè)置另外一個任務(wù)棧即可:
android:taskAffinity=".payAct"
根據(jù)得到網(wǎng)頁的高度來設(shè)置webview的高度。同時h5做好適配,等比縮放寬高。與此同時可能出現(xiàn),獲取bitmap信息有空白的ui內(nèi)容,這時候要做延遲獲取,因?yàn)閛nPageFinished方法只是拉取了代碼,并不表示頁面渲染完畢。
webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
設(shè)置為NARROW_COLUMNS時,如果webview本身不是全屏的,則分享出去的圖片則不能鋪滿全屏。
Xml肯定沒寫錯,但是為啥高版本可以,低版本就報(bào)錯呢?
這是因?yàn)閳D片資源文件被放到了低版本文件夾中去了,所以高版本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)//設(shè)置style
ScrollView中添加:
android:fillViewport="true"
重啟清緩存,構(gòu)建、提高版本都無效,原因在于編碼不規(guī)范!
android:drawableTop="2dp" //錯誤代碼?。?!
一般出現(xiàn)該中問題可以比的下文件的history看看有哪些資源文件引用等不規(guī)范的地方,實(shí)在找不出就回退版本來看下。
是因?yàn)槭褂昧薱ontentTv.setText(Html.fromHtml(content));
而不是直接的contentTv.setText(content);
前者的換行也沒用,也有可能因?yàn)槠湮谋竞绣e誤的HTML標(biāo)簽文本的緣故,所以需要在使用時要考慮下兼容。
所以,結(jié)合業(yè)務(wù)情況來使用BigDecimal會好些。
不用多說,相信大家都有一個共識:無論什么行業(yè),最牛逼的人肯定是站在金字塔端的人。所以,想做一個牛逼的程序員,那么就要讓自己站的更高,成為技術(shù)大牛并不是一朝一夕的事情,需要時間的沉淀和技術(shù)的積累。
關(guān)于這一點(diǎn),在我當(dāng)時確立好Android方向時,就已經(jīng)開始梳理自己的成長路線了,包括技術(shù)要怎么系統(tǒng)地去學(xué)習(xí),都列得非常詳細(xì)。
這里最后分享耗時一年多整理的一系列Android學(xué)習(xí)資源:Android源碼解析、Android第三方庫源碼筆記、Android進(jìn)階架構(gòu)師七大專題學(xué)習(xí)、歷年BAT面試題解析包、Android大佬學(xué)習(xí)筆記等等。
這些內(nèi)容均免費(fèi)分享給大家,需要完整版的朋友,直接轉(zhuǎn)發(fā)+點(diǎn)贊+私信回復(fù)【資料】一鍵領(lǐng)?。。?!
日常開發(fā)中碰到了各種開發(fā)問題,撿選了一部分分享出來。有些問題非常簡單,屬于編碼規(guī)范類,有些屬于特定情況下碰到的問題,不是很常見。不太準(zhǔn)確的地方,歡迎共同探討下~
requestWindowFeature(Window.FEATURE_NO_TITLE);// 隱藏標(biāo)題
需要在onCreate之前調(diào)用,否則在4.4.2的機(jī)型上會報(bào)錯:
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(其它手機(jī)看到是ok的)
titleTv.setTextColor(colorId);//錯誤的方式(常見封裝類調(diào)用)
titleTv.setTextColor(ContextCompat.getColor(context,colorId));//正確的方式
a.靜態(tài)/類全局變量需要單獨(dú)判斷;
b.string 中文本空格效果無法體現(xiàn),給字符串加上雙引號
<string name="Chinese"> 中 文 </string>
<string name="Chinese">" 中 文 "</string>
注意:使用Application.getString的方式,在切換語言后,并沒有切換這種方式引用的資源內(nèi)容??梢愿臑榱硗獾腶ctivity里面的getString方法獲取
ActivityManagerForce removing ActivityRecord{6dd5804 u0 包名/當(dāng)前WebviewActivity t8819}: app died, no saved state
不支持onCustumView方法,去掉即可
android:textAllCaps="false"
系統(tǒng)會自動彈出,但是進(jìn)入設(shè)置打開即可。
TextView使用WrapContent,lines=1但是內(nèi)容顯示不全
只能顯示在屏幕內(nèi)的部分,在屏幕外的部分,在屬性動畫拉出來看的時候就沒有。
(這種問題發(fā)生在自定義跑馬燈控件時)
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設(shè)置寬度。
三星 SM-C7000(C7) 6.0.1的系統(tǒng)就會出現(xiàn)在這個問題
if(intent.resolve(context.getPackageManager))!=null){
...
}
使用隱式intent進(jìn)行startActivity時,最好加上該種判斷和try catch,因?yàn)楸2粶?zhǔn)哪種機(jī)型就出問題了
getWindow().setBackgroundDrawableResource(R.drawable.widget_dialog_round_corner);
大意就是TextView的shadowRadius不能大于25,是xml代碼中的問題,改小shadowRadius即可。
包括button下的部分模糊的情況也是該問題導(dǎo)致的。
友盟分享鏈接如果內(nèi)容中帶有紅包字樣,那么圖片會失效顯示不出來(分享的主體倒是可以自己看到)
阿里云、應(yīng)用寶的地址是會被攔截到使用小米手機(jī)系統(tǒng)自帶的下載器進(jìn)行下載安裝,而這個下載器會默認(rèn)使用迅雷下載組件,阿里云的地址下載完畢后點(diǎn)擊下載完成的push會顯示文件無法識別(而應(yīng)用寶的地址能正常安裝),小米系及華為應(yīng)用的下載地址以及非.apk結(jié)尾的地址則會按照正常流程跳入瀏覽器進(jìn)行下載。關(guān)閉小米手機(jī)上的迅雷下載組件的功能后,則可以通過點(diǎn)擊push正常安裝,不會出現(xiàn)文件無法識別的問題。
所以解決這個問題的很簡單,把下載地址換成非apk結(jié)尾的地址即可。
android:roundIcon="@mipmap/logo"
application中這個屬性也要設(shè)置
白屏的原因是系統(tǒng)本身啟動是需要時間的(背景默認(rèn)就是白色)。
一般做法:
設(shè)置Theme
<style name="MNoActionBar" parent="Theme.AppCompat.NoActionBar">
<!--<item name="android:windowFullscreen">false</item>-->
<!--<item name="android:windowBackground">@drawable/welcome</item>//此行可以給window設(shè)置背景圖片,單獨(dú)設(shè)置此項(xiàng)不設(shè)置透明的話是沒有延遲打開的情況(無白屏切換,和啟動頁使用同一資源則無縫切換,但默認(rèn)是全屏的)-->
<item name="android:windowIsTranslucent">true</item>//設(shè)置透明之后不會有和頁面背景圖之間色值的閃爍,同時點(diǎn)擊桌面圖標(biāo)時會有些延遲進(jìn)入頁面
</style>
針對具體的activity:如果一個activity中既要顯示全屏的啟動圖,也要等到內(nèi)容加載完畢后顯示最新內(nèi)容(非全屏),那么就應(yīng)該對相關(guān)方法的進(jìn)行判斷設(shè)置:
private void setFullScreenEnable(boolean isEnable) {
if (isEnable) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //隱藏狀態(tài)欄
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //顯示狀態(tài)欄
}
}
如果在含有Webview的頁面中,則可以分別在onCreate方法和onpageFinished的回調(diào)中進(jìn)行設(shè)置即可。
特殊情況:如果整個頁面是加載的H5,即便使用了上面的設(shè)置,還是會有白屏一閃而過的情景。這是H5頁面本身渲染導(dǎo)致的,那么目前的處理方法是針對啟動頁做個延時dismiss的效果,這樣就遮蓋了白屏一閃而過的瞬間:
fullLoadingView.postDelayed(new Runnable() {//需要做下延遲,否則會出現(xiàn)頁面一瞬間白屏的情況(應(yīng)該是頁面渲染H5的原因)
@Override
public void run() {
fullLoadingView.setVisibility(View.GONE);
setFullScreenEnable(false);
}
}, 300);
B應(yīng)用打開A應(yīng)用的cActivity時,A應(yīng)用的其它Activity也會被打開(之前存在的,A應(yīng)用一直在后臺)
這是taskAffinity的緣故,因?yàn)楣灿昧送粋€任務(wù)棧,所以在manifest文件中設(shè)置另外一個任務(wù)棧即可:
android:taskAffinity=".payAct"
根據(jù)得到網(wǎng)頁的高度來設(shè)置webview的高度。同時h5做好適配,等比縮放寬高。與此同時可能出現(xiàn),獲取bitmap信息有空白的ui內(nèi)容,這時候要做延遲獲取,因?yàn)閛nPageFinished方法只是拉取了代碼,并不表示頁面渲染完畢。
webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
設(shè)置為NARROW_COLUMNS時,如果webview本身不是全屏的,則分享出去的圖片則不能鋪滿全屏。
Xml肯定沒寫錯,但是為啥高版本可以,低版本就報(bào)錯呢?
這是因?yàn)閳D片資源文件被放到了低版本文件夾中去了,所以高版本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)//設(shè)置style
ScrollView中添加:
android:fillViewport="true"
重啟清緩存,構(gòu)建、提高版本都無效,原因在于編碼不規(guī)范!
android:drawableTop="2dp" //錯誤代碼?。?!
一般出現(xiàn)該中問題可以比的下文件的history看看有哪些資源文件引用等不規(guī)范的地方,實(shí)在找不出就回退版本來看下。
是因?yàn)槭褂昧薱ontentTv.setText(Html.fromHtml(content));
而不是直接的contentTv.setText(content);
前者的換行也沒用,也有可能因?yàn)槠湮谋竞绣e誤的HTML標(biāo)簽文本的緣故,所以需要在使用時要考慮下兼容。
所以,結(jié)合業(yè)務(wù)情況來使用BigDecimal會好些。
不用多說,相信大家都有一個共識:無論什么行業(yè),最牛逼的人肯定是站在金字塔端的人。所以,想做一個牛逼的程序員,那么就要讓自己站的更高,成為技術(shù)大牛并不是一朝一夕的事情,需要時間的沉淀和技術(shù)的積累。
關(guān)于這一點(diǎn),在我當(dāng)時確立好Android方向時,就已經(jīng)開始梳理自己的成長路線了,包括技術(shù)要怎么系統(tǒng)地去學(xué)習(xí),都列得非常詳細(xì)。
這里最后分享耗時一年多整理的一系列Android學(xué)習(xí)資源:Android源碼解析、Android第三方庫源碼筆記、Android進(jìn)階架構(gòu)師七大專題學(xué)習(xí)、歷年BAT面試題解析包、Android大佬學(xué)習(xí)筆記等等。
這些內(nèi)容均免費(fèi)分享給大家,需要完整版的朋友,直接轉(zhuǎn)發(fā)+點(diǎn)贊+私信回復(fù)【資料】一鍵領(lǐng)?。。?!