Форум программистов, компьютерный форум CyberForum.ru

Темы. Наследование свойств элементов - Android

Войти
Регистрация
Восстановить пароль
 
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 414
28.01.2016, 12:10     Темы. Наследование свойств элементов #1
В теме указываем стиль для кнопок:
XML
1
2
3
<style name="AppThemeDark" parent="@android:style/Theme.Black">
        <item name="MyImageButtonStyle">@style/MainButtonStyleBlack</item>
</style>
В этом случае все свойства, которые не были описаны в стиле MainButtonStyleBlack сбрасываются. Хотя свойства по-умолчанию прописаны в "@android:style/Theme.Black" (такие как смена цвета при нажатии и другие).
Можно ли сделать так, чтобы эти свойства наследовались от Theme.Black?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
28.01.2016, 13:49     Темы. Наследование свойств элементов #2
А вам
XML
1
parent="..."
в теге style ни о чем не говорит? Можно каждому стилю там задать родительскую тему и все, не описанные в стиле, параметры будут подставляться из этой темы.
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 414
28.01.2016, 14:15  [ТС]     Темы. Наследование свойств элементов #3
Spelcrawler, я пробовал.
Но проблема, видимо, не в этом.
Как оказалось, и без parent всё нормально получается, пока не применю к стилю для ImageButton свойство background для смены цвета:
XML
1
2
3
<style name="MainButtonStyleBlack" parent="android:Theme.Light">
        <item name="android:background">#000000</item>
</style>
После этого кнопки превращаются в что-то непотребное, пока не пропишу в этом стиле многие свойства.
Так что проблема остается.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
28.01.2016, 14:17     Темы. Наследование свойств элементов #4
Slon747, а остальные стили не наследуются от этой темы с бекграундом?
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 414
28.01.2016, 14:54  [ТС]     Темы. Наследование свойств элементов #5
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Slon747, а остальные стили не наследуются от этой темы с бекграундом?
Сейчас у меня так.
attr.xml:
XML
1
2
3
4
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="SmallButtonStyle" format="reference"/>
</resources>
styles.xml:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<style name="AppThemeDark" parent="@android:style/Theme.Black">
    <item name="SmallButtonStyle">@style/SmallButtonStyleDark</item>
</style>
 
<!-- Application theme. -->
<style name="AppTheme" parent="AppThemeDark">
</style>
 
<style name="SmallButtonStyleDark" parent="android:Theme.Black">
    <item name="android:layout_width">48dp</item>
    <item name="android:layout_height">48dp</item>
    <item name="android:scaleType">centerCrop</item>
    <item name="android:layout_gravity">center</item>
    <item name="android:onClick">btnClick</item>
    <item name="android:background">#000000</item>
</style>
main.xml:
XML
1
2
3
4
<ImageButton
    android:id="@+id/btnFilter"
    android:src="@drawable/search"
    style="?attr/SmallButtonStyle"/>
Причем, даже если если прописать background не к в стиле, а в самой кнопке, то она также портится.
И началось это после того, как я сделал связь между темой и стилем через аттрибуты.
До этого background не портил свойства кнопки.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
28.01.2016, 14:58     Темы. Наследование свойств элементов #6
Slon747, а ну да, если кнопке задать background цветом и будет "что-то непотребное". Нужно через selector делать.
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 414
28.01.2016, 16:54  [ТС]     Темы. Наследование свойств элементов #7
Цитата Сообщение от Spelcrawler Посмотреть сообщение
а ну да, если кнопке задать background цветом и будет "что-то непотребное". Нужно через selector делать.
Сделал через селектор, ничего не изменилось.
XML
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 
    <item
          android:drawable="@color/pressed_highlight"
          android:state_pressed="true"/>
 
    <item
          android:drawable="@color/small_butoon_color"/>
</selector>
Как только применяю селектор, кнопки портятся.
Может при использовании селектора нужно все свойства прописывать в нем, а не в стиле?
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
28.01.2016, 17:19     Темы. Наследование свойств элементов #8
Цитата Сообщение от Slon747 Посмотреть сообщение
кнопки портятся
Что значит "портятся"?
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 414
28.01.2016, 17:25  [ТС]     Темы. Наследование свойств элементов #9
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Что значит "портятся"?
Кнопки находятся на панели.
Изображение кнопки растягивается на всю поверхность (возможно, перестает работать centerCrop), пропадает padding (хотя он и не был нигде указан, но видимость его была), кнопки выстраиваются вплотную друг к другу.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
28.01.2016, 17:26     Темы. Наследование свойств элементов #10
Можно попробовать задать tintColor вместо background. Если приложение не расчитано на андроид ниже 5 версии можно просто:
XML
1
android:backgroundTint="#FFF"
Если нужна поддержка старых версий можно использовать AppCompatButton из библиотеки поддержки, вместо Button и задать ей параметр
XML
1
app:backgroundTint="#FFF"
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 414
28.01.2016, 17:32  [ТС]     Темы. Наследование свойств элементов #11
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Можно попробовать задать tintColor вместо background. Если приложение не расчитано на андроид ниже 5 версии можно просто:
XMLВыделить код
1
android:backgroundTint="#FFF"
Если нужна поддержка старых версий можно использовать AppCompatButton из библиотеки поддержки, вместо Button и задать ей параметр
XMLВыделить код
1
app:backgroundTint="#FFF"
Спасибо. Но нужна поддержка андроида 4.
А с использованием AppCompatButton у меня вышла проблема. Вроде как нужно проект переводить в gradle, иначе не работает.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
28.01.2016, 17:38     Темы. Наследование свойств элементов #12
Цитата Сообщение от Slon747 Посмотреть сообщение
Вроде как нужно проект переводить в gradle
Советую в любом случае перевести на Gradle. Но библиотеку можно и без него подключить
Паблито
не спать!
1882 / 1616 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
28.01.2016, 17:53     Темы. Наследование свойств элементов #13
AppCompatButton использовать не нужно, в описании даже сказано
A Button which supports compatible features on older version of the platform, including:
Supports R.attr.textAllCaps style attribute which works back to Eclair MR1.
Allows dynamic tint of it background via the background tint methods in android.support.v4.view.ViewCompat.
Allows setting of the background tint using R.attr.backgroundTint and R.attr.backgroundTintMode.
This will automatically be used when you use Button in your layouts. You should only need to manually use this class when writing custom views.
Тема приложения естественно должна наследоваться от чего-то AppCompat

Затинтовать все кнопки можно примерно так
в теме приложения добавляем строку
XML
1
        <item name="buttonStyle">@style/MyButtonStyle</item>
и создаем стиль для кнопки
XML
1
2
3
    <style name="MyButtonStyle" parent="Widget.AppCompat.Button">
        <item name="backgroundTint">#5F9</item>
    </style>
Или я не въехал в тему?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2016, 20:36     Темы. Наследование свойств элементов
Еще ссылки по теме:

Android Определение стиля внутри темы
Байдинг свойств в xml Android
Подключение темы из Support Library Android
Android Как при смене темы менять стили кнопок?
Android Возможность смены темы/стиля приложения в рантайме

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
28.01.2016, 20:36     Темы. Наследование свойств элементов #14
Паблито, я только в разметке пробовал - там на обычный Button нельзя назначить tint.
Yandex
Объявления
28.01.2016, 20:36     Темы. Наследование свойств элементов
Ответ Создать тему
Опции темы

Текущее время: 02:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru