: Тег | htmlbook.ru

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-элемент