2017-04-04 70 views
0

我一直在花費我的大腦超過一個小時,試圖找出爲什麼我的QuickSettings瓷磚沒有被基於Tile.STATE_ACTIVE和Tile.STATE_INACTIVE着色。我使用清單中設置的相同圖標,但是我在onStartListening中動態更改狀態。這在Android 7.1.1上工作正常。Android 7.1.2 QuickSettings瓷磚沒有着色

有沒有其他人注意到他們的QuickSettings瓷磚沒有被着色?

+0

在幾個月前提供關閉狀態可繪製的alpha通道後,意外地偶然發現了這篇文章。 @ Flar2你的發現解釋了爲什麼現在透明度設置在alpha通道中的瓷磚顯示比系統瓷磚的其他部分更亮,繪圖必須被緩存。它一直在竊聽我的生活。 –

回答

0

我有同樣的問題,而一切工作正常,直到7.1.1。 看起來這是從Android 7.1.2開始的。 我在本版本處於測試階段時觀察到同樣的行爲。我必須回滾到7.1.1才能正確測試我的應用程序,並且我確信這個問題將在最終的7.1.2版本中得到解決。但它沒有。 同樣的東西也可以用一些框架圖塊複製,比如顯示佈局界限配置文件GPU渲染:這些圖塊不會反映開/關狀態。我不知道在7.1.2最終版本中如何明顯地忽略了這些東西。到目前爲止,我唯一想到的臨時解決方案是爲關閉狀態提供drawable,爲最終的apk添加更多資源。這不是一個解決方案,但至少它可以幫助更好地瞭解開/關狀態。

+0

我也認爲它肯定會被修復。我想我們應該提交一個bug ... – Flyview

+0

@Flyview我做了:https://code.google.com/p/android/issues/detail?id = 326265 – rascarlo

1

爲每個狀態顯式設置圖標,它會正確着色。您必須爲每個狀態使用不同的可繪製資源,否則它不會更改。幸運的是,它可以是完全相同的圖標。我剛剛複製ic_powersave_tile並將其重命名爲ic_powersave_tile2。我偶然發現了這一點,我的一個應用程序在7.1.2上工作,其中一個沒有,這就是唯一的區別。

private void setCurrentState(int state){ 
    Tile tile = getQsTile(); 

    if (tile == null) 
     return; 

    tile.setState(state); 
    switch (state){ 
     case Tile.STATE_ACTIVE: 
      tile.setIcon(Icon.createWithResource(getApplicationContext(), 
        R.drawable.ic_powersave_tile)); 
      break; 

     case Tile.STATE_INACTIVE: 
      tile.setIcon(Icon.createWithResource(getApplicationContext(), 
        R.drawable.ic_powersave_tile2)); 
      break; 

     case Tile.STATE_UNAVAILABLE: 
      tile.setIcon(Icon.createWithResource(getApplicationContext(), 
        R.drawable.ic_powersave_tile)); 
      break; 

    } 

    tile.updateTile(); 
}