Содержание
Android: Стили
Статья проплачена кошками — всемирно известными производителями котят.
Если статья вам понравилась, то можете поддержать проект.
Панель навигации
Делаем панель навигации прозрачной (API 19+)
<style name="AppTheme" parent="Theme.AppCompat"> <item name="android:windowTranslucentNavigation">true</item> </style>
По умолчанию панель навигации с кнопками «Назад», «Домой» и «Недавние программы» имеет чёрный цвет. Переопределяем (API 21+).
<style name="AppTheme" parent="Theme.AppCompat"> <item name="android:navigationBarColor">@color/my_color</item> </style>
Строка состояния
Можно поменять на Android 5 (Lollipop).
<item name="android:statusBarColor" tools:targetApi="lollipop">@color/teal_700</item>
Позже (API 21+) можно уже не указывать targetApi.
<item name="android:statusBarColor">@color/statusBarColour</item>
Делаем строку состояния прозрачной (API 19+).
<style name="AppTheme" parent="Theme.AppCompat"> <item name="android:windowTranslucentStatus">true</item> </style>
Меняем цвет строку состояния на белый (API 23+).
<style name="AppTheme" parent="Theme.AppCompat"> <item name="android:windowLightStatusBar">true</item> </style>
Программный способ (API 21++).
val window = window window.statusBarColor = ContextCompat.getColor(this, R.color.teal_200)
Переопределяем внешний вид стандартного значка меню в виде трёх точек по вертикальной линии.
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item> </style> <!-- Стиль для замены значка меню в ActionBar. Установите 'android:actionOverflowButtonStyle' в AppTheme --> <style name="MyActionButtonOverflow" parent="android:style/Widget. Holo.Light.ActionButton.Overflow"> <item name="android:src">@mipmap/ic_launcher</item> </style>
Читатели сообщили, что код может не работать и дали ссылку на работающий вариант:
You can use this style (or Theme.AppCompat.Light.NoActionBar): <style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="actionOverflowButtonStyle">@style/OverFlow</item> </style> <style name="OverFlow" parent="Widget.AppCompat.ActionButton.Overflow"> <item name="android:src">@drawable/ic_myoverflow</item> </style>
Кнопки
Обычная кнопка по умолчанию использует стиль buttonStyle, который можно не указывать.
<Button ... />
На панели Palette можно увидеть кнопку меньшего размера Small Button, который на экране будет выглядеть чуть меньше стандартной кнопки с уменьшенным шрифтом. Разница заключается в стиле buttonStyleSmall.
<Button ... />
Также возможны другие стили. Например, кнопка без окантовки (плоская кнопка) — стиль borderlessButtonStyle. Она покажет свои границы в момент нажатия.
<Button ... />
Переопределяем через собственные стили и подключаем через android:theme.
<style name="PrimaryFlatButton" parent="Theme.AppCompat.Light"> <item name="android:buttonStyle">@style/Widget.AppCompat.Button.Borderless.Colored</item> <item name="colorControlHighlight">@color/colorAccent</item> <item name="colorAccent">@color/colorPrimary</item> </style>
Ещё один стиль, попадавший мне в примерах — buttonStyleInset.
<Button ... />
Можно применить стиль Material Design:
<Button . .. />
У кнопки ToggleButton есть свой стиль buttonStyleToggle:
<ToggleButton ... />
В Material Design буквы в кнопках и метках выводятся в верхнем регистре. Можно отменить это правило, если добавить строку в используемой теме.
<item name="android:textAllCaps">false</item>
Или более тонкая настройка для кнопки.
<style name="AppTheme" parent="AppBaseTheme"> <item name="android:buttonStyle">@style/Button</item> </style> <style name="Button" parent="Widget.AppCompat.Button"> <item name="android:textAllCaps">false</item> </style>
Выбираемый элемент в Android 5.0 (API 21)
У компонентов в стиле Material Design при нажатии появляется анимация в виде расходящего круга (ripple). Стиль selectableItemBackgroundBorderless применим к различным компонентам: кнопки, рамки и т. д. Применим к ImageView. В первом случае анимация не распространяется за пределы своего компонента. Во втором случае анимация выходит за пределы границ компонента.
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:background="?android:attr/selectableItemBackgroundBorderless" android:clickable="true" android:src="@mipmap/ic_launcher"/> <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:background="?android:attr/selectableItemBackgroundBorderless" android:clickable="true" android:src="@mipmap/ic_launcher"/>
Стоит отметить, что существует упрощённый стиль selectableItemBackground, доступный для старых устройств. В этом случае анимация уже не виде круга, а в более простом варианте. Для первой кнопки в виде прямоугольника внутри своего контейнера. Во втором случае анимация также не выходит за границы своего контейнера.
Значок гамбургера в DrawerLayout
Для примера Android: Шаблон Navigation Drawer Activity
Можно поменять цвет значка гамбургера. Откроем файл стилей res/values/styles.xml и добавим:
<!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> </style> <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="spinBars">true</item> <item name="color">@android:color/white</item> </style>
Элемент spinBars со значением true позволяет использовать анимацию. В противном случае значок будет статичным.
Реклама
&двоеточие; Элемент информации о стиле — HTML: Язык гипертекстовой разметки
HTML-элемент