解決某些Rom中EditText無法修改光標的問題

發現、探索、總結


簡介

本篇博客主要講如何解決某些romEditText 光標無法修改的問題。


現象

我們大都遇到過這種情況,由於爲了保證App整體的一致性,Ui 有時候會讓你修改某些光標的顯示顏色,你或許會說這有什麼難的?一句代碼搞定,代碼如下:

app:textCursorDrawable="@drawable/xx"

結果你運行在模擬器上,喜滋滋的看着自己的成果,但是後面測試仍然找到了你,說你仍沒有修改,這時候的你一臉懵逼。你要去找測試理論,測試拿出了他的華爲手機 …,你或許會感嘆,這很華爲…

對於某些國產rom ,類似華爲、小米、魅族它們對系統源碼進行了修改,某些情況下會導致系統的api無效,但經過實踐發現,修改光標最終修改的只是mCursorDrawableRes對應的值,即使在國產rom也是如此,所以有了後面的解決辦法。


解決辦法

通過上面的現象和實踐我們知道只需要能夠修改mCursorDrawableRes對應的值就可以保證兼容這些系統,如何去修改呢?

具體思路如下: 利用反射獲取對應的成員變量,然後將自己需要傳入的值進行設置

具體步驟:

  1. 繼承EditText

  2. 聲明自定義的屬性,用於接收自定義的值

  3. 利用反射將用戶定義的值進行設置


簡單方式

你或許會說我難不成還要自己去自定義嗎?而且感覺每次都這樣寫好麻煩啊! 好吧,程序員怎麼可以這麼low,使用下面的方式即可輕鬆上車… 滴滴.

  • 導入該庫

Step 1. Add it in your root build.gradle at the end of repositories:

    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

Step 2. Add the dependency

dependencies {
            compile 'com.github.guohaiyang1992:GeneralEditText:0.2'
    }
  • 使用該庫的控件com.ghy.ui.GeneralEditText

  • 使用app:textCursorDrawable="@drawable/xx"

如果你想看具體的實現,請跳轉至github


總結

至此已經完成了修改光標的學習。遇到問題多思考。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章