2014-02-03 3 views
4

Я создал пользовательскую тему для панели кнопок, используя buttonBarStyle для каждой кнопки и кнопкиBarButtonStyle на макете. Он отлично работает, но я хочу, чтобы изменить цвет текста для кнопок, но он по-прежнему принимает цвет по умолчанию (@android: цвет/primary_text_holo_light) Мой код:Переопределение цвета текста для кнопок, не работающих

<style name="ButtonBarTheme" parent="AppTheme"> 
     <item name="buttonBarStyle">?android:attr/buttonBarStyle</item> 
     <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item> 
     <item name="android:textColor">#ffffff</item> 
</style> 

И для макета:

<LinearLayout 
    style="?android:attr/buttonBarStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#0090cc" 
    android:orientation="horizontal" > 

    <Button 
     android:id="@+id/bar_button1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     style="@style/ButtonBarStyleButton" 
     android:text="Button 1" /> 

    <Button 
     android:id="@+id/bar_button2" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     style="?android:attr/buttonBarButtonStyle" 
     android:text="Button 2" /> 

</LinearLayout> 

AppTheme имеет родительский объект AppBaseTheme, который имеет родительский андроид: Theme.Holo.Light.DarkActionBar.

Что мне нужно сделать, чтобы изменить цвет текста кнопок?

EDIT: Я пытался применять цвет на каждом элементе, и он работает, но я хочу, чтобы изменить его, перекрывая цвет в файле стиля (сохранить все свойства конструкции в одном месте, подобно CSS).

Кроме того, я попытался создать стиль, который имеет свойства андроида: атр/buttonBarStyle»

<style name="ButtonBarStyleButtonBase"> 
     <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item> 
    </style> 

    <style name="ButtonBarStyleButton" parent="ButtonBarStyleButtonBase"> 
     <item name="android:textColor">#ffFFff</item> 
    </style> 

, но он ведет себя странно: цвет обновляется, но никакие свойства не образуют родительский стиль являются видимо.

+0

Вместо изменения цвета в AppTheme. Вы пытались добавить его непосредственно к элементу кнопки? (или я здесь что-то не хватает?) –

+0

Да, я это сделал, и это сработало, но я хочу изменить его, переопределив цвет в файле стиля, я не хочу иметь стили в одном месте и цвет в другом место. Я хотел бы применить концепцию CSS, но я не могу полностью понять метод применения и переопределения определенных свойств стиля в Android. –

+0

Могли бы вы также включить xml для кнопки? – TheIT

ответ

4

Я хотел бы изложить этот ответ, сказав, что я не совсем понимаю, что такое панель кнопок. В документах разработчиков Android нет упоминаний о них, помимо определения некоторых атрибутов стиля для поэтому я не уверен, как они сопоставляются с фактическими видами/виджетами.

Я верю, что происходит то, что вам не хватает различия между стилем и темой. Стиль применяется к представлению для определения его атрибутов. Тема применяется как к всем Приложению, так и к отдельной Деятельности и предоставляет возможность определять стили по умолчанию для Представлений, отображаемых в приложении/Деятельности, на котором применяется Тема (между прочим).

Более того, атрибуты, такие как buttonBarStyle и buttonBarButtonStyle, будут использоваться только Activity для разрешения стилей по умолчанию для кнопок и кнопок в панелях кнопок. Поскольку эти атрибуты разрешены только Activity, они будут игнорироваться, если они будут применены непосредственно к вашим представлениям.

Поэтому, если вы хотите использовать Темы для применения стилей, вам нужно создать новое определение стиля, которое расширяет желаемый базовый стиль, а затем присваивает этот настраиваемый стиль соответствующему атрибуту вида стиля в определении темы.

<style name="CustomButtonStyle" parent="@android:attr/buttonStyle"> 
     <item name="android:textColor">#ffffff</item> 
</style> 


<style name="AppTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar"> 
     <item name="buttonStyle">@style/CustomButtonStyle</item> 
</style> 


<application 
    ... 
    android:theme="@style/AppTheme" > 

Все кнопки без явного атрибута стиля теперь будут отображаться с белым текстом.

Однако, для вашего особого случая, когда вы хотите отображать кнопки с ButtonBar Style, вы должны заметить, что ButtonBar Style не применяется автоматически к вашим кнопкам. Вам необходимо вручную определить кнопки, которые вы хотите отобразить с помощью этого стиля.Таким образом, в приведенном выше примере будет выглядеть примерно так:

<style name="CustomButtonBarStyle" parent="@android:attr/buttonBarStyle"> 
     <item name="android:textColor">#ffffff</item> 
</style> 


<style name="AppTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar"> 
     <item name="buttonBarStyle">@style/CustomButtonBarStyle</item> 
</style> 


<application 
    ... 
    android:theme="@style/AppTheme" > 

Теперь примените стиль ButtonBar вы определили для текущей Темы:

<Button 
     ... 
     style="?android:attr/buttonBarStyle"/> 

Следует отметить, что это будет применяться стилем ButtonBar определенного для текущей темы (которая, если она не будет переопределена Activity, будет одинаковой во всей вашей заявке). Также обратите внимание, что, поскольку вы ссылаетесь на стиль, определенный для текущей темы, он позволяет вам определять текущую тему по-разному в зависимости от требуемых квалификаторов ресурсов, не изменяя свой код макета.

+1

+1 - Просто потому, что это отличный пример. Я узнал о настройке тем. –

+0

Я пробовал это и: 1. при объявлении parnet = "? Android: attr/buttonBarStyle" я получаю сообщение «Нет ресурса найдено, что соответствует ...» в этой строке, поэтому я заменил «?» с «@», и он работает, но 2. стили из родителя не видны (я считаю, что стили, определенные мной, применяются правильно, потому что цвет текста изменен на белый). Обсервованный панель кнопок не является фактическим виджетами/представлениями в андроиде (это похоже на концепцию на самом деле ...) –

+0

Когда вы говорите, что стили для родителя не видны, ссылаетесь на атрибуты стиля, которые вы ожидаете от родительская тема Холо? Не могли бы вы уточнить, в чем проблема? – TheIT

0

Я попробовал другое решение, данное здесь, без везения. Попытка использовать частный стиль (андроид: attr/buttonBarStyle, в данном случае) в качестве родителя дает ошибки.

Решение проблемы изменения цвета кнопок под buttonBarStyle является воссоздание Android: атр/buttonBarStyle для себя, назначив кнопкам фона:

android:background="?android:attr/selectableItemBackground" 

, а затем указать:

android:textColor="@color/your_color" 

, который правильно изменит цвет текста кнопок при сохранении внешнего вида кнопкиBarButtonStyle.

Смежные вопросы