2016-02-26 69 views

回答

7

that same 23.2 blog post規定,

默認情況下,無論是「空中飛人」將匹配系統值(從UiModeManager.getNightMode()

然而,截至目前,這實際上意味着它相當於​​作爲觸發夜間模式的唯一的東西是薑餅時代的汽車碼頭。

這意味着,在目前的設備,只有這樣,才能看到一個黑暗的主題使用DayNight主題時使用NIGHT_MODE_YES或NIGHT_MODE_AUTO

由於在這兩個官爵和Chris Banes' post on DayNight說,你可以改變模式在全球一級或地方一級。

全局級別依賴於靜態的AppCompatDelegate.setDefaultNightMode()方法,該方法在整個應用程序中設置DayNight模式。由於這隻適用於您的進程處於活動狀態時(即它只是一個內存標誌),所以您需要確保在每次啓動應用程序時都設置它。從克里斯後做一個推薦的方法是將其設置爲自定義應用程序類的靜態方法:

static { 
    AppCompatDelegate.setDefaultNightMode(
     AppCompatDelegate.MODE_NIGHT_...); 
} 
public class MyApplication extends Application { 

相反,如果你只是想改變模式,單個活動/對話框,您可以改爲調用getDelegate().setLocalNightMode()

public class MyActivity extends AppCompatActivity { 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState == null) { 
     // Set the local night mode to some value 
     getDelegate().setLocalNightMode(
       AppCompatDelegate.MODE_NIGHT_...); 
     // Now recreate for it to take effect 
     recreate(); 
    } 
    } 
} 

這改變僅僅是單個實例 - 你會注意到在調用recreate() - 已經被膨脹不會在夜間模式變化的影響意見,這樣你就可以強制重新創建自己以獲取更新值的活動。

當然,克里斯後還指出

還記得,默認爲MODE_NIGHT_FOLLOW_SYSTEM,所以如果我們在將來增加一個用戶可見的設置到平臺,程序兼容性會自動使用它。

+0

要在白天或晚上更改其他屬性,請查看[本答案](http://stackoverflow.com/a/35629740/1676363),其中解釋如何使用'night'和'notnight'資源文件夾秒。 – ianhanniballake

3

似乎是在運行Android Lollipop的錯誤與程序兼容性23.2.0Google Issue Tracker

下面的代碼不只是工作前棒棒堂:

public class MyApplication extends Application { 
    static { 
    AppCompatDelegate.setDefaultNightMode(
     AppCompatDelegate.MODE_NIGHT_YES); 
    } 
    [...] 
}