Android: настройка всех виджетов пользовательского интерфейса с использованием одной темы

#android #android-manifest

#Android #android-манифест

Вопрос:

Как я могу настроить все виджеты в приложении, создав один стиль и применив его к приложению через android: theme в AndroidManifest?

Ответ №1:

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

В resvaluesstyles.xml:

 <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
  <style name="TextColorForTheme">
    <item name="android:textColor">@color/red</item>
  </style>
</resources>
  

В resvaluesthemes.xml:

 <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
  <style name="myTheme" parent="@style/android:Theme">
    <item name="android:listSeparatorTextViewStyle">@style/TextColorForTheme</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowFrame">@null</item>
  </style>
</resources>
  

Затем в вашем AndroidManifest.xml , установите либо все приложение, либо отдельные действия для использования этой темы.:

   <application
    android:theme="@style/myTheme"
<snip>    
    <activity
      android:theme="@style/myTheme"
<snip>
  

Кроме того, вы можете задать тему в коде для своей Java-активности:

   @Override
  public void onCreate(Bundle bundle)
  {
    super.onCreate(bundle);
    setTheme(R.style.myTheme);
<snip>
  

Комментарии:

1. Хорошо, но это работает глобально, не так ли? Что я хотел бы сделать, так это установить стиль отдельно на ex. Кнопка, текстовое поле и т. Д

2. Тема позволяет вам применить стиль ко всему приложению или действию (я думал, это то, о чем вы спрашивали). Если вы хотите применить стиль к отдельным элементам пользовательского интерфейса, просто используйте style:»@style:TextColorForTheme» в XML для объекта (например, TextView). Смотрите: developer.android.com/guide/topics/ui/themes.html

Ответ №2:

Вы не сможете сделать это, создав только один стиль. Тема — это, по сути, мета-стиль, который определяет стили по умолчанию для каждого из различных доступных виджетов. Вы начнете с создания темы (которая сама по себе является стилем) с родительским элементом одной из существующих системных тем и установки атрибутов стиля по умолчанию для каждого виджета, который вы хотите изменить из базовой темы. Например, если у вас был другой стиль кнопок, который вы хотели установить по умолчанию в своей теме, вы можете добавить следующее в определение темы:

 <item name="android:buttonStyle">@style/MyButtonStyle</item>
  

Смотрите http://developer.android.com/guide/topics/ui/themes.html для получения дополнительной информации.

Комментарии:

1. Я не заметил, что * Атрибуты стиля. Большое спасибо.