1. 程式人生 > >Android開發遇到的坑

Android開發遇到的坑

最近在開發中總會遇到各種坑,由於記憶力不好,先記錄在這裡。

以前看過的一些總結,基本上很齊全了:

http://jcodecraeer.com/plus/view.php?aid=3773

https://www.zhihu.com/question/27140400

https://github.com/jiang111/awesome-android-tips

另外自己開發中碰到的一些問題記錄:

1.Glide在Listview或GridView等列表中使用時,需設定 .dontAnimate().into(ImageView)。清除預設動畫,否則圖片顯示會有異常。

2.在使用Activity + 多個fragment模型。若出現異常崩潰後,Activity重啟,會重新執行onCreate方法(此時bundle不為空),此時可能會造成第一個fragment重複新增進入FragmentManager的情況(此時會發現第一個介面會層疊在螢幕上),可根據bundle做相應的判斷。另外,在一些低配手機上,按home建,當程式在後臺一段時間後再次喚起,也可能會發生該情況。

3.在一個專案中,各人負責不同的模組,其中可能有控制元件ID命名相同的情況。當合並時不會報錯可以正常執行。但最近遇到尷尬的情況,一個EditText控制元件的setText設定後文字不顯示,但是getText獲取正常。

4.關於Activity的生命週期OnDestory()和finish()。finish()執行完之後onDestory()並不會馬上執行。最近碰到一個bug,重寫OnDestory()方法,並在其中做了一些物件的清空操作。當開啟該介面後關閉介面,再馬上開啟,有概率會碰到新介面開啟後,延遲的onDestory()方法在oncreate()之後執行,導致資料的一些異常bug。

5.關於TextView的佔行,maxlines表示最大佔行。android:lines方式強制佔多行。不同之處在於設定lines時,在行數不足時會用空白行填充。可用來保持資料整齊。

6.關於RadioButton。預設的button是在左邊。若想將圖片放在右邊,可以設定android:button=“@null”,設定.setCompoundDrawable(null,null,drawable,null);將圖片顯示在右邊。然而在4.x的手機上。即使設定了android:button=“@null”,radioButton任然會顯示預設的圖片。若想要預設的不顯示,可以給button設定一個空的drawable:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

</selector>

7.關於static靜態變數。今天才發現,狂按返回鍵退出app,即使app看上去退出了,但是程序還在,宣告的靜態變數未被回收。再次啟動app時任然保留之前退出前的值。所以靜態變數一定慎用、慎用、慎用。

8.ViewPager使用時一般底部會有指示器顯示當前頁面的資訊,之前一直用自定義控制元件或者Layout動態新增View來顯示,程式碼一堆。最近看到其他app使用一個TextView直接搞定,特地反過來看看TextView+SpannableString來實現

/**
     * 使用方式 textView.setText(getPageText(5,2))
     * @param pageNum 指示點數目
     * @param index 第幾個頁面選中
     * @return
     */
    private SpannableString getPageText(int pageNum, int index) {
        StringBuilder sb = new StringBuilder();
        Drawable drawableNormal = ResourcesUtils.getDrawable(R.drawable.point_normal);
        Drawable drawableCheck = ResourcesUtils.getDrawable(R.drawable.point_check);
        for (int i = 0; i < pageNum; i++) {
            sb.append(". ");
        }
        SpannableString ss = new SpannableString(sb.toString());
        for (int i = 0; i < pageNum; i++) {
            ImageSpan is;
            if (i == index) {
                drawableCheck.setBounds(0, 0, drawableCheck.getIntrinsicWidth(),
                        drawableCheck.getIntrinsicHeight());
                is = new ImageSpan(drawableCheck, ImageSpan.ALIGN_BASELINE);
            } else {
                drawableNormal.setBounds(0, 0, drawableNormal.getIntrinsicWidth(),
                        drawableNormal.getIntrinsicHeight());
                is = new ImageSpan(drawableNormal, ImageSpan.ALIGN_BASELINE);
            }
            ss.setSpan(is, i * 2, i * 2 + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        }
        return ss;
    }

佈局中TextView高度最好固定高度,不然圖片顯示會有異常(只顯示一半,應該與控制元件的測量有關)。顯示結果如圖

相關推薦

React Native Android 開發

〇. Android Native 接入 React Native 1. 基本配置規則 https://reactnative.cn/docs/integration-with-existing-apps/ 2. 稍作優化 如果Native庫用得太多,建議把package

微信開發事件---未來元素點選事件

相信不少人在微信裡開發過網頁,在非a/button標籤時,頁面沒重新整理生成的新元素我們一般都用$(document).unbind('click',".preview_imag").on('click',".preview_imag",function(){       

Android 開發

1:在KR3288 andorid一體機上開發人臉識別系統時,發現ConstraintLayout 的UI佈局跟編輯和手機上的狀態完全不一致,而且素材變模糊,處理方法:把素材都放在“src/res/drawable”下就可以了。(之前放在mipmap-xxhdpi資料夾中)

Android 開發錯】Listview 報錯 java.lang.ClassCastException:

修改專案,為ListView增加一行不一樣的控制元件時出現以下報錯: java.lang.ClassCastException: com.xxx.activity.xxxListViewFragment$xxxListAdapter$HeadView

Android開發錯】Android studio 新增jar後編譯報錯Error converting bytecode to dex: Cause: Dex cannot pars

** 添加了一個mysql-connector-java-5.1.38-bin.jar然後編譯就報錯了 ** 錯誤資訊如下: Error:Error converting bytecode to dex: Cause: Dex cannot par

android開發裏跳過的——button不響應點擊事件

一個 不響應 color 事件 short ces andro generate lis 昨天遇到一個頭疼的問題,在手機上按鈕事件都很正常,但是在平板上(橫屏顯示的狀態),button點擊事件不響應,代碼簡化如下: public class Test extends Ac

Android開發遇到的-----融雲2.8.+版本修改插件列表

rsa 圖片 項目需求 tex 顯示 根據 -- 移除 pre 簡介   融雲在2.8.+的時候,對輸入區域進行了重構,輸入區域整個為RongExtension,插件為RongExtension區域的Plugin模塊 List<IPluginModule&g

記錄Android開發一個小,佈局檔案TextView中新增onClick後,點選無效問題

自己寫東西的時候,在TextView上添加了onClick去增加點選事件,去跳轉另一個Activity,執行後結果點選無效,新增Toast,Toast也不顯示,程式碼如下: <TextView android:layout_width="wrap_content"

經驗之談;Android開發中需注意的一些

1、不要排斥新技術和新工具。 Android Studio 1.0 之後的版本,基本已經穩定到可以支援正常的工作開發的程度了。單純就書寫效率而言,Android Studio 帶來的好處絕對大於它和Gradle的學習成本。JetBrains的IDE,用過都說好。 還有就是適當的提升targe

iOS 開發之 內購 續篇

之前弄過一個內購買專案,然後總結了一些心得,最近又弄內購的過程中有發現了一些新問題, 就當時對之前的文章做個續篇吧. 之前的內購心得連結: http://blog.csdn.net/jesse0308/article/details/78458823 最近弄的內購專案是提供給接入方的

Android 開發時遇到的

1.建立檔案時選擇了c++時遇到這個錯誤 Error:executing external native build for cmake D:\dev\testcode\MayApplication\app\CMakeLists.txt 解決辦法:在build.gradle 里加上下面

Android開發過程中的及解決方法收錄(四)

1.某個控制元件要放在Linearlayout佈局的底部(底部導航條) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.

Android開發過程中的及解決方法收錄

  1.某個控制元件要放在Linearlayout佈局的底部(底部導航條)      <LinearLayout      android:layout_width="match_parent"      android:orientation="vertical"      android:layou

Android開發中遇到的

一、使用Proxy後Gradle無限編譯 出現場景 正常開啟 Android Studio 3.1.4 時,由於無法連線Google伺服器,導致無法下載API,所以通過proxychains進行啟動,正常下載好Api後,在建立專案的時候出現了Gradle無限編譯的問題,表

android 開發環境搭建及原理,還有

花了一天時間,幾個東西終於通了。 android開發: 1.eclipse——————就是一個介面,一個殼,讓你來操作的,就像人的外表,不過他可以包很多東西進去(下面的東西他都包) 2.jdk————————這個是java程式設計的必須模組,用java開發,跑jav

Android攻城獅前端指南

持續更新 1.寫程式碼過程中webstorm底部一直閃爍,程式碼也提示不了 File->Invalidate Cahes/Restart -> Invalidate and Restart 複製程式碼 2.按鈕未點選自動執行點選事件 handlerClick = (questio

大疆無人機Android版SDK開發之旅(一)----前言

  最近一段時間一直在做大疆無人機安卓版開發,這水也是挺深的,不仔細看官網SDK的介紹就會遇到各種各樣的坑,簡單記錄一下,希望可以讓其他人少走一些彎路。   安卓端用到的SDK大概有兩種:Android SDK和Android UX SDK   Android SDK(官網介紹):   開發人員可以通過SDK

android 開發中遇到的(不定期新增)

學了android好久還是小白的傻孩子,遇到了各種奇奇怪怪的坑,記錄一下以防忘記。 8.0坑: 坑1:傳送Intent訊息開啟apk安裝程式,6.0的手機用的好好的,到8.0手機安裝頁面就一閃而過了 原因:8.0移除了“允許未知來源”的檢查框,它關掉了!!!!所以我這個未知來源的安裝就被

android 開發 微博分享時遇到的

最近想專案中遇見了寫微博分享,就專門下了微博SDK去看,開始肯定是要先去微博開發平臺上申請開發者並註冊app,成功後會獲得App Key和App Secret,然後才可以進行下面的操作,但在寫的過程中發現微博的SDK還是有點坑的,這裡列舉出來,以便以後避開坑,踩坑是真難受啊

React Native Android 開發中遇到的

react native 更新非常活躍,下面的總結可能在後續會被完善修改好,根據react native 版本情況採用下面的方法, 我在使用的時間是 2015年12月10日。 網路請求方式,我使用官網的示例程式碼並沒用成功,簡單修改後才能使用 示例