發現、探索、總結
簡介
本篇博客主要講如何解決某些rom
下EditText
光標無法修改的問題。
現象
我們大都遇到過這種情況,由於爲了保證App整體的一致性,Ui 有時候會讓你修改某些光標的顯示顏色,你或許會說這有什麼難的?一句代碼搞定,代碼如下:
app:textCursorDrawable="@drawable/xx"
結果你運行在模擬器上,喜滋滋的看着自己的成果,但是後面測試仍然找到了你,說你仍沒有修改,這時候的你一臉懵逼。你要去找測試理論,測試拿出了他的華爲手機 …,你或許會感嘆,這很華爲…
對於某些國產rom
,類似華爲、小米、魅族它們對系統源碼進行了修改,某些情況下會導致系統的api
無效,但經過實踐發現,修改光標最終修改的只是mCursorDrawableRes
對應的值,即使在國產rom
也是如此,所以有了後面的解決辦法。
解決辦法
通過上面的現象和實踐我們知道只需要能夠修改mCursorDrawableRes
對應的值就可以保證兼容這些系統,如何去修改呢?
具體思路如下: 利用反射獲取對應的成員變量,然後將自己需要傳入的值進行設置
具體步驟:
繼承
EditText
聲明自定義的屬性,用於接收自定義的值
利用反射將用戶定義的值進行設置
簡單方式
你或許會說我難不成還要自己去自定義嗎?而且感覺每次都這樣寫好麻煩啊! 好吧,程序員怎麼可以這麼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
總結
至此已經完成了修改光標的學習。遇到問題多思考。