Jak zahrnout temné téma do aplikace pro Android

Pro vývojáře je vytvoření aplikace pro Android snadný proces - navrhování atraktivního uživatelského rozhraní je ve skutečnosti obtížné. Proto jsme pro vývojáře, kteří potřebují inspiraci při vytváření jednoduchých, ale přitažlivých uživatelských rozhraní, napsali příručku „Jak navrhnout uživatelské rozhraní Android App, které není sát“. V tomto průvodci jsme se krátce zmínili o přidání tematického / nočního režimu do vašich aplikací, a v tomto průvodci vás provedeme.

Přidání motivu temného / nočního režimu do aplikace může být pro uživatele skvělou volbou - šetří výdrž baterie a je mnohem jednodušší pro oči v noci. Bílé pozadí na černém textu nebo jakákoli kombinace 'jasných' barev ve vašem uživatelském rozhraní je opravdu stresující pro oči, zejména v noci. Tmavé pozadí se světlejším textem je tedy mnohem méně stresující a škodlivé pro oči, proto mnoho populárních aplikací začalo zahrnovat temné téma - YouTube a Reddit naposledy, i když Facebook stále své nezveřejnil po slibování jednoho zpět v Smět.

Pokud chcete snadno přidat přepínatelný tmavý režim do své aplikace pro Android, postupujte podle tohoto průvodce Appuals a v případě problémů se vyjádřete!

Vytvoření atributů XML

Nejprve musíte vytvořit soubor atributů XML, který bude s tématikou pracovat. To je mnohem lepší než zahrnout do sady APK dvě sady zdrojů pro dvě různá témata, a tak nafouknout velikost APK, protože Android může nativně měnit barvy atributů prostřednictvím tohoto XML.

Takže ve složce „zdroje“ aplikace vytvořte soubor s názvem attrs.xml a přidejte tyto řádky ( jedná se o stylové atributy):

Před Lollipopem jsme nemohli specifikovat atributy pro drawables, takže jsme museli specifikovat ID zdrojů pro drawables - to však již neplatí.

Přidání stylů

Abychom to dokázali, musíme vytvořit dva oddělené styly, které budou sdílet stejnou základnu. První bude zřejmě vaše primární „světlé“ téma a druhé bude vaše „temné“ téma.

 # F4F4F6 # 96F4F4F6 #FFFF # F2F2F3 @ drawable / i_light_plholder # 33343B / item> # 8033343B # 28292e # F2F2F3 @ drawable / i_dark_pholder 

Zde jsou skutečné styly pro danou aktivitu:

 # F4F4F6 # 33343B 

Jedno z těchto témat musíte zadat do manifestu pro aktivitu aplikace, což je v tomto případě FeedActivity.

Stylizace pohledů

Zde je příklad stylizace zobrazení - v tomto příkladu je to chyba přesměrování „Stránka nenalezena“.

Jak povolit dynamické přepínání motivů

Nejlepší a nejúčinnější způsob, jak povolit dynamické přepínání motivů, je načíst hodnotu SharedPreference, která se používá k uložení nastavení do instance aplikace pomocí vzoru Singleton, což znamená, že to nemusíme dělat na začátku každé aktivity.

 public class App rozšiřuje Application {public static final String TAG = "App"; private boolean isNightModeEnabled = false; @Override public void onCreate () {super.onCreate (); // Zde načítáme stav nočního režimu SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences (this); this.isNightModeEnabled = mPrefs.getBoolean („NIGHT_MODE“, false); } public boolean isNightModeEnabled () {return isNightModeEnabled; } public void setIsNightModeEnabled (boolean isNightModeEnabled) {this.isNightModeEnabled = isNightModeEnabled; }} 

Protože se tato instance spouští před čímkoli jiným, umožňuje vám zavolat BoNean isNightModeEnabled () kdykoli chcete, v jakékoli činnosti patřící do aplikace, jakmile bude otevřena.

 veřejná konečná třída FeedActivity rozšiřuje AppCompatActivity {private final static String TAG = „FeedActivity“; @Override chráněný void onCreate (Bundle savedInstanceState) {if (MyApplication.getInstance (). IsNightModeEnabled ()) {setTheme (R.style.FeedActivityThemeDark); } super.onCreate (uloženéInstanceState); setContentView (R.layout.activity_feed); }} 

Pokud však chcete použít jiné téma, než je téma určené v souboru manifestu, musí být provedeno před voláním nadřazené metody onCreate ().

Nastavení stavu pomocí AppCompat

AppCompat je opravdu užitečný pro celou řadu věcí, a v tomto případě ho použijeme k nastavení stavu režimu. To znamená, že již nemusíte používat instanci aplikace k vytvoření stavu v mezipaměti, čímž se sníží nadbytek mezipaměti aplikace ( i když s velmi malým okrajem ).

 AppCompatDelegate .setDefaultNightMode (AppCompatDelegate.MODE_NIGHT_YES); 

Zde můžete použít:

  • AppCompatDelegate.MODE_NIGHT_YES

    AppCompatDelegate.MODE_NIGHT_NO

    AppCompatDelegate.MODE_NIGHT_AUTO

Načítání státu

 AppCompatDelegate.getDefaultNightMode (); veřejná konečná třída FeedActivity rozšiřuje AppCompatActivity {private final static String TAG = „FeedActivity“; @Override chráněný void onCreate (Bundle savedInstanceState) {if (AppCompatDelegate.getDefaultNightMode () == AppCompatDelegate.MODE_NIGHT_YES) {setTheme (R.style.FeedActivityThemeDark); } super.onCreate (uloženéInstanceState); setContentView (R.layout.activity_feed); }} 

To by mělo být - můžete i nadále upravovat a vylepšovat hodnoty podle svých představ, ale tento průvodce je skvělým úvodem, který vám pomůže začít zahrnutím nativního temného motivu do aplikace pro Android.

Zajímavé Články