Quick Setting Tiles 基礎(chǔ)教程。

參考文檔:

Android 7.0 允許你直接在通知欄添加自定義的圖標(biāo)。雖然不知道國內(nèi)的系統(tǒng)會如何處理這個功能,但是可以先來嘗嘗鮮。

什么是Quick Setting Tile

就是通知欄上的圖標(biāo),比如 Wifi 開關(guān),手電筒開關(guān)等。

什么操作適合使用 Quick Setting Tile

相比于桌面快捷方式,Widget 等方式,Setting Tiles 的優(yōu)勢是更方便更快捷,不需要解鎖手機(jī)就能使用。

那么,什么樣的操作適合Quick Setting Tile。官方的博客認(rèn)為需要考慮操作的緊急度(Urgency) 和使用率(Frequency)。
上面說到的兩點(diǎn)中Urgency 的優(yōu)先級更高,因?yàn)?Frequency 因人而異,每一個用戶都不一樣。

Tilte Service

要創(chuàng)建自定義的 Title,要提供一個跟圖標(biāo)綁定的 Tile Service。Tile Service 是一種的特殊的 Service,它的生命周期完全由系統(tǒng)來控制。

Title Service 的定義方法跟普通的 Service 沒有區(qū)別,需要在manifest.xml 文件中聲明:

<service    
    android:name=".TestTitleService"
    android:icon="@drawable/ic_add_title"
    android:label="@string/add_title"
    android:permission="android.permission.BIND_QUICK_SETTINGS_TITLE">    
    <intent-filter>        
        <action android:name="android.service.quicksettings.action.QS_TILE"/>      
    </intent-filter>
</service>

icon 是在通知欄顯示的圖標(biāo)。需要選一個前景色為白色,背景色為透明的向量圖標(biāo),最好是一個有意義的圖標(biāo)。
label 是圖標(biāo)的標(biāo)題,不應(yīng)該超過18個字符。

permission 和 action 標(biāo)識出這個 Service 是一個 Title Service。

Title Service 的生命周期

Title Service 是一個Bound Service. 所以她的生命周期完全是由 Android 系統(tǒng)控制的。
Tile Service 的主要生命周期有:

  • onTileAdded() 當(dāng)用戶將圖標(biāo)添加到通知欄的時(shí)候調(diào)用。
  • onStartListening() 當(dāng)圖標(biāo)變得可見的時(shí)候調(diào)用。
  • onStopListening() 當(dāng)圖標(biāo)變得不可見的時(shí)候調(diào)用。
  • onTileRemoved() 當(dāng)用戶將圖標(biāo)移除的時(shí)候調(diào)用。
    可以根據(jù)需求去使用這四個函數(shù)。注意 Tile Service 在onStopListening()之后就會結(jié)束了。不要假定在 start 到 stop 之外 service 還能存活。

處理點(diǎn)擊事件

處理 Tile 的點(diǎn)擊事件也很簡單。重寫 TileService 的 onClick 方法就可以了。
點(diǎn)擊事件中可以打開一個 Dialog 或者 Activity。但是要注意一點(diǎn),Tile 可能在鎖屏的情況下被點(diǎn)擊,這時(shí)是不能彈出 Dialog 的,但是可以打開帶有 FLAG_SHOW_WHEN_LOCKED Flag 的 Activity。但是這兩種方式其實(shí)都不是特別自然,不推薦使用。

下面是一段 click 的示例代碼, 用戶每次點(diǎn)擊都會改變圖標(biāo)的狀態(tài)。

    @Override
    public void onClick() {
        Tile tile = getQsTile(); // 獲取 Tile
        if (tile.getState() == Tile.STATE_ACTIVE) {
            tile.setState(Tile.STATE_INACTIVE);
        } else {
            tile.setState(Tile.STATE_ACTIVE);
        }

        tile.updateTile(); // 更新完后必須調(diào)用 update 才能生效
    }

其他

關(guān)于 QSTile 還有很多相關(guān)的內(nèi)容。上面只是一個基礎(chǔ)的教程。更多的內(nèi)容請閱讀參考文檔。

demo

https://github.com/Guaidaodl/Android-Demos/tree/master/QSTile

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,835評論 2 45
  • Android自定義快速設(shè)置 Customizer Quick Setting 自定義快速設(shè)置 Android N...
    FamilyYuan閱讀 3,378評論 0 5
  • 愿往后的時(shí)光都是嶄新的 去記錄 去尋找 去做夢 愿我們都能成為 自己想成為的人 如果有一天 你一無所有 我還是你最...
    而廢閱讀 206評論 0 0
  • First created on Jan.05.2013. All rights reserved. 站在凱旋門上...
    astrocachet閱讀 266評論 0 0

友情鏈接更多精彩內(nèi)容