Android
Тема, Стиль, Атрибут
Поиск…
Использовать пользовательскую тему по всему миру
В themes.xml:
<style name="AppTheme" parent="Theme.AppCompat">
<!-- Theme attributes here -->
</style>
В AndroidManifest.xml:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- Activity declarations here -->
</application>
Определение первичных, первичных темных и акцентных цветов
Вы можете настроить цветовую палитру вашей темы .
Использование каркасного API ,
<style name="AppTheme" parent="Theme.Material">
<item name="android:colorPrimary">@color/primary</item>
<item name="android:colorPrimaryDark">@color/primary_dark</item>
<item name="android:colorAccent">@color/accent</item>
</style>
Использование библиотеки поддержки Appcompat (и AppCompatActivity
)
<style name="AppTheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
</style>
Использовать пользовательскую тему для каждой операции
В themes.xml:
<style name="MyActivityTheme" parent="Theme.AppCompat">
<!-- Theme attributes here -->
</style>
В AndroidManifest.xml:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat">
<activity
android:name=".MyActivity"
android:theme="@style/MyActivityTheme" />
</application>
Цвет Overscroll (API 21+)
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:colorEdgeEffect">@color/my_color</item>
</style>
Цвет пульсации (API 21+)
Анимация пульсации отображается, когда пользователь нажимает интерактивные представления.
Вы можете использовать тот же цвет пульсации, который используется вашим приложением, назначая ?android:colorControlHighlight
в ваших представлениях. Вы можете настроить этот цвет, изменив атрибут android:colorControlHighlight
в своей теме:
Этот цвет эффекта можно изменить:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:colorControlHighlight">@color/my_color</item>
</style>
Или, если вы используете тему материала:
<style name="AppTheme" parent="android:Theme.Material.Light">
<item name="android:colorControlHighlight">@color/your_custom_color</item>
</style>
Световая строка состояния (API 23+)
Этот атрибут может изменить фон значков строки состояния (вверху экрана) на белый.
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:windowLightStatusBar">true</item>
</style>
Прозрачная навигация и бары состояния (API 19+)
Панель навигации (внизу экрана) может быть прозрачной. Вот как это сделать.
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:windowTranslucentNavigation">true</item>
</style>
Строка состояния (верхняя часть экрана) может быть прозрачной, применяя этот атрибут к стилю:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:windowTranslucentStatus">true</item>
</style>
Цвет панели навигации (API 21+)
Этот атрибут используется для изменения панели навигации (одна, содержащая кнопку Back, Home Recent). Обычно он черный, однако цвет может быть изменен.
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:navigationBarColor">@color/my_color</item>
</style>
Наследование темы
При определении тем обычно используется тема, предоставляемая системой, а затем изменения изменяют внешний вид в соответствии с его собственным приложением. Например, так Theme.AppCompat
тема Theme.AppCompat
:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
Эта тема теперь имеет все свойства стандартной темы Theme.AppCompat
, кроме тех, которые мы явно изменили.
Существует также ярлык при наследовании, обычно используемый, когда он наследуется от его собственной темы:
<style name="AppTheme.Red">
<item name="colorAccent">@color/red</item>
</style>
Поскольку у него уже есть AppTheme.
в начале его имени он автоматически наследует его, не требуя определения parent
темы. Это полезно, когда вам нужно создать определенные стили для части (например, одного действия) вашего приложения.
Несколько тем в одном приложении
Используя более чем одну тему в приложении для Android, вы можете добавлять пользовательские цвета для каждой темы, чтобы:
Во-первых, мы должны добавить наши темы в style.xml
следующим образом:
<style name="OneTheme" parent="Theme.AppCompat.Light.DarkActionBar">
</style>
<!-- -->
<style name="TwoTheme" parent="Theme.AppCompat.Light.DarkActionBar" >
</style>
......
Выше вы можете увидеть OneTheme и TwoTheme .
Теперь перейдите в свой AndroidManifest.xml
и добавьте эту строку: android:theme="@style/OneTheme"
в свой тег приложения , это сделает тему OneTheme по умолчанию:
<application
android:theme="@style/OneTheme"
...>
Создайте новый xml-файл с именем attrs.xml
и добавьте этот код:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="custom_red" format="color" />
<attr name="custom_blue" format="color" />
<attr name="custom_green" format="color" />
</resources>
<!-- add all colors you need (just color's name) -->
Вернитесь к style.xml
и добавьте эти цвета со своими значениями для каждой темы:
<style name="OneTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="custom_red">#8b030c</item>
<item name="custom_blue">#0f1b8b</item>
<item name="custom_green">#1c7806</item>
</style>
<style name="TwoTheme" parent="Theme.AppCompat.Light.DarkActionBar" >
<item name="custom_red">#ff606b</item>
<item name="custom_blue">#99cfff</item>
<item name="custom_green">#62e642</item>
</style>
Теперь у вас есть пользовательские цвета для каждой темы, давайте добавим этот цвет в наши представления.
Добавьте цвет custom_blue в TextView, используя «? Attr /»:
Перейдите к своему imageView и добавьте этот цвет:
<TextView>
android:id="@+id/txte_view"
android:textColor="?attr/custom_blue" />
Моу мы можем изменить тему только одной строкой setTheme(R.style.TwoTheme);
эта строка должна быть до setContentView()
методе onCreate()
, как этот Activity.java
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.TwoTheme);
setContentView(R.layout.main_activity);
....
}
изменить тему для всех действий сразу
Если мы хотим изменить тему для всех действий, нам нужно создать новый класс с именем MyActivity, который расширяет класс AppCompatActivity
(или класс Activity
) и добавляет строку setTheme(R.style.TwoTheme);
to onCreate () :
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (new MySettings(this).isDarkTheme())
setTheme(R.style.TwoTheme);
}
}
Наконец, перейдите ко всем вашим действиям, добавьте, чтобы все они расширили базовый класс MyActivity :
public class MainActivity extends MyActivity {
....
}
Чтобы изменить тему, просто перейдите в MyActivity и измените R.style.TwoTheme
на свою тему ( R.style.OneTheme
, R.style.ThreeTheme
....).