在看一個 UI 庫原碼時

看到了一個監聽的類 ViewTreeObserver 

今天我們就來介紹一下此 class 吧。

 

Observer 的設計模式大家多少都有看過


文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

這陣子幫專案寫指紋登入的功能

花了一點時間看文件後,決定做一個 helper 來簡化流程

 

要在程式中使用 Fingerprint API 其實很簡單

只要滿足以下三個步驟

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

今天看到同事有報出以下錯誤

error: Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?
error: Unexpected end tag string

 

這是一個在 string.xml 中設定字串時要注意的一件事

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

今天我們開發時發生了「靈異事件」

各位看倌請看一下這段 code 

view.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        GG.d("RDBG:onClick() => view.isClickable()="
         +view.isClickable()+" / id="+view.getId());
    }
});

然後觸發點擊輸出如下

 

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

開發過程中,一定很常遇到傳值這件事

而傳值的方法也很多種,相關的議題也是讓人討論再三

今天我們就來談談 Acitivy 和 Fragment 兩種傳值的基本方式吧


1、Bundle 

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

今天發生件怪事

明明 code 都一模一樣的,用同一份程式碼去 build & run

但用模擬器跑就會 crush,手機確卻正常啟動

模擬器移除 app 再重新安裝也無法解決

最後請教前輩的經驗,才知道和 Android Studio 有關係

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

今天來講在開發時碰到的小問題 Application Installation Failed 

不論是在模擬器,還是在手機都沒辦法安裝 app

造成這樣的原因已知有2種

 

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

前篇我們提到了解決 Call requires API level 的 Annotation 不止一個

今天我們就來說說其差異性在哪

一共有三個 Annotation 要解說

// 此 class 需要 M 以上調用,否則會 crush
@RequiresApi(api = Build.VERSION_CODES.M)
@TargetApi(Build.VERSION_CODES.M)
@SuppressLint("NewApi")
public class FingerprintHelper { 。。。}

 

1、@TargetApi(Build.VERSION_CODES.M)@TargetApi(23)

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

在開發上,若我們使用到了某些 API 是有 Android Version 限制的話

就會出現此錯誤 Call requires API level 23 (current min is 19) 詳見文底

 

要解這個問題很簡單,利用 Build.VERSION 的判斷即可解決

if version 到某一版本之上才執行 API

文章標籤

顏澤偉 發表在 痞客邦 留言(1) 人氣()

今天在用 Fragment 時,看到了一個值 RetainInstance

這個參數的預設值是 false

若是改為 true 則會將 Fragment 做保留的動作,如下

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
    。。。
}

保留是什麼意思呢?

當 Activity 重建時 (如:螢幕轉向)

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()