Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 522
1

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

28.01.2016, 12:10. Просмотров 693. Ответов 13
Метки нет (Все метки)

В теме указываем стиль для кнопок:
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?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2016, 12:10
Ответы с готовыми решениями:

Наследование свойств
Хотелось бы описать 1 функцию в базовом классе типа: void func(){ procedure( a...

Наследование свойств от Object
Может сможет кто помочь? Хочу задать для Object свойство propertyName (это...

Наследование свойств компонентов
возник небольшой вопросик (чистое любопытство) такого плана: допустим возьмём...

Наследование базовых свойств usercontrol
Всем доброго дня суток! Был создан новый usercontrol, наследуемый от...

Наследование функций и свойств. Немного не пойму
Вот код: class Point { private $y = 0; public function getY() {...

13
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
28.01.2016, 13:49 2
А вам
XML
1
parent="..."
в теге style ни о чем не говорит? Можно каждому стилю там задать родительскую тему и все, не описанные в стиле, параметры будут подставляться из этой темы.
0
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 522
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>
После этого кнопки превращаются в что-то непотребное, пока не пропишу в этом стиле многие свойства.
Так что проблема остается.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
28.01.2016, 14:17 4
Slon747, а остальные стили не наследуются от этой темы с бекграундом?
0
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 522
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 не портил свойства кнопки.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
28.01.2016, 14:58 6
Slon747, а ну да, если кнопке задать background цветом и будет "что-то непотребное". Нужно через selector делать.
1
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 522
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>
Как только применяю селектор, кнопки портятся.
Может при использовании селектора нужно все свойства прописывать в нем, а не в стиле?
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
28.01.2016, 17:19 8
Цитата Сообщение от Slon747 Посмотреть сообщение
кнопки портятся
Что значит "портятся"?
0
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 522
28.01.2016, 17:25  [ТС] 9
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Что значит "портятся"?
Кнопки находятся на панели.
Изображение кнопки растягивается на всю поверхность (возможно, перестает работать centerCrop), пропадает padding (хотя он и не был нигде указан, но видимость его была), кнопки выстраиваются вплотную друг к другу.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
28.01.2016, 17:26 10
Можно попробовать задать tintColor вместо background. Если приложение не расчитано на андроид ниже 5 версии можно просто:
XML
1
android:backgroundTint="#FFF"
Если нужна поддержка старых версий можно использовать AppCompatButton из библиотеки поддержки, вместо Button и задать ей параметр
XML
1
app:backgroundTint="#FFF"
1
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 522
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, иначе не работает.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
28.01.2016, 17:38 12
Цитата Сообщение от Slon747 Посмотреть сообщение
Вроде как нужно проект переводить в gradle
Советую в любом случае перевести на Gradle. Но библиотеку можно и без него подключить
0
Pablito
2759 / 2191 / 741
Регистрация: 12.05.2014
Сообщений: 7,688
Завершенные тесты: 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>
Или я не въехал в тему?
1
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
28.01.2016, 20:36 14
Паблито, я только в разметке пробовал - там на обычный Button нельзя назначить tint.
0
28.01.2016, 20:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2016, 20:36

Наследование свойств и методов классов в Delphi
Не могу решить проблему с наследованием свойств и методов. Задача:...

Наследование Label и расширение его свойств
Всем здравствуйте. Как создать элемент управления-расширитель свойств и методов...

Задачи на наследование классов, в которых данные описаны в качестве свойств
Создать класс Money для работы с денежными суммами в котором для рублей и...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru