Лучшая практика для обеспечения нескольких тем приложений Android - PullRequest
4 голосов
/ 23 октября 2010

Я пытаюсь решить, как организовать приложение для Android, которое будет иметь несколько тем.Вот упрощенный пример моей проблемы:

2 темы, «светлая» и «темная»,
внутри каждой темы, два цвета текста: «включено» и «отключено»

сейчаспроблема в том, что когда я определяю свой TextView, я не хочу вызывать там «светлое» или «темное», я просто хочу указать тему на уровне приложения и применить ее.в основном, я хочу селекторы CSS.я хочу иметь возможность определить мою тему, например,

<style name="Light.enabled" .../>
<style name="Light.disabled" .../>

, а текстовое представление, например,

<TextView style="@style/.enabled" .../>
<TextView style="@style/.disabled" .../>

, и применить ее «включено» или «отключено» в зависимости от того,Вызвали «светлое» или «темное» на уровне приложения.

на этой странице http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html

показано приложение, которое

  1. определяет стиль, скажем, "light.enabled"

    # 000000

  2. определяет ссылку на атрибут, скажем "enabled"

  3. определяет элемент стиля (темы), например,

    @ style / light.enabled

  4. использует attr для определения стиля в представлении,

это то, что я хочу, но у меня это не работает.Единственная разница в том, что я использую appwidget.Автор задает тему о деятельности.единственное место, которое я могу установить, это Context.setTheme () и в теге application в манифесте.ни один из которых, кажется, не имеет значения.

Ответы [ 3 ]

3 голосов
/ 23 октября 2010

я нашел эту страницу, http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html

, которая дает отличный пример динамического применения нескольких тем.Я не могу заставить его работать с виджетом приложения, но это другая проблема.

0 голосов
/ 27 мая 2015

Если вы пытаетесь поддерживать несколько тем в приложении.

  1. Определите тему в values ​​/ styles.xml

    <style name="AppTheme" parent="Theme.AppCompat.Light">
    

    @ drawable / ic_mode_comment_white_24dp

    ... @ drawable / ic_subject_black_24dp

  2. определить цвета в colors.xml

<resources> <color name="colorPrimary">#FF9800</color> </resources>

переключать темы во время выполнения действия

public abstract class BaseActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { if (PreferenceManager.getDefaultSharedPreferences(this) .getBoolean("pref_dark_theme"), false)) { setTheme(R.style.AppTheme_Dark); } super.onCreate(savedInstanceState); } }

следовать этим статьям part1 и part2

0 голосов
/ 23 октября 2010

Вы не можете применять темы к виджетам приложения.Вам просто нужно иметь другой XML, который использует разные стили.

Кроме того, это сбивает с толку, когда вы говорите о том, что свет против темноты и включен или выключен как похожие вещи.Они сильно различаются в платформе.

  • Свет и темнота являются актуальными «темами», как определяет их платформа, которая представляет собой набор значений по умолчанию для атрибутов ресурсов, укорененных в android:стиль / тема.Они изменяются с помощью android: theme в манифесте или setTheme () в API.

  • включены и отключены состояния.Они используются с StateListDrawable (через тег в drawable /) или ColorStateList (через тег в color /), чтобы выбрать рисование / цвет на основе включенного состояния.

Например, вотцвет, который изменяется в зависимости от состояния:
https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/color/primary_text_dark.xml

А вот чертеж, который изменяется в зависимости от состояния:
https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/drawable/btn_default.xml

...