歡迎光臨
每天分享高質量文章

Android 日常開發問題總結

作者:不會飛的小豬

鏈接:https://www.jianshu.com/p/d34f3633371c

日常開發中碰到了各種開發問題,撿選了一部分分享出來。有些問題非常簡單,屬於編碼規範類,有些屬於特定情況下碰到的問題,不是很常見。不太準確的地方,歡迎共同探討下~

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:windowIsTranslucent">trueitem>//設置透明之後不會有和頁面背景圖之間色值的閃爍,同時點擊桌面圖標時會有些延遲進入頁面
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/bottomSheetStyleWrapperitem>
style

>
<style name=“bottomSheetStyleWrapper” parent=“Widget.Design.BottomSheet.Modal”>
<item name=“android:background”>@android:color/transparentitem>

style>

new BottomSheetDialog(context,R.style.BottomSheetDialog)//設置style

 

22、ScrollView中的LinearLayout的layout_weigt無效


ScrollView中添加:

 

android:fillViewport="true" 

 

23、Process ‘command ‘E:android oolsdkuild-tools.0.3aapt.exe” finished with non-zero exit value 1


重啟清快取,構建、提高版本都無效,原因在於編碼不規範!

 

android:drawableTop="2dp" //錯誤代碼!!!

 

一般出現該中問題可以比的下檔案的history看看有哪些資源檔案取用等不規範的地方,實在找不出就回退版本來看下。

 

24、dialog中的TextView顯示不全的問題


是因為使用了contentTv.setText(Html.fromHtml(content));
而不是直接的contentTv.setText(content);


前者的換行也沒用,也有可能因為其文本含有錯誤的HTML標簽文本的緣故,所以需要在使用時要考慮下兼容。

25、浮點型精度問題

 

demo

 

所以,結合業務情況來使用BigDecimal會好些。

已同步到看一看
赞(0)

分享創造快樂