Подтвердить что ты не робот

Widget.AppCompat.Button colorButtonNormal показывает серый

У меня values:styles.xml с:

<style name="AppTheme.Button" parent="Base.Widget.AppCompat.Button">
    <item name="colorButtonNormal">@color/my_color</item>
    <item name="android:textColor">@android:color/white</item>
</style>

и values-v21:styles.xml с:

<style name="AppTheme.Button" parent="Base.Widget.AppCompat.Button">
      <item name="android:colorButtonNormal">@color/my_color</item>
      <item name="android:textColor">@android:color/white</item>
</style>

И стиль приложения с

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
      <item name="android:buttonStyle">@style/AppTheme.Button</item>
</style>

Но цвета выглядят серыми, а не @color/my_color

4b9b3361

Ответ 1

Для настройки одной кнопки установите только андроид: theme = "@style/AppTheme.Button" на вашу кнопку.

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

Определите свой стиль, как в вашем вопросе

<style name="AppTheme.Button" parent="Base.Widget.AppCompat.Button">
    ........
    <item name="colorButtonNormal">@color/my_color</item>
    ........
</style>

[EDIT]

Смотрите демонстрацию GitHub здесь

Ответ 2

Используйте Widget.AppCompat.Button.Colored в качестве родителя для вашего стиля.

<style name="RedButton" parent="Widget.AppCompat.Button.Colored">
    <item name="android:textColor">@color/white</item>
    <item name="colorButtonNormal">@color/red</item>
</style>

Используйте android:theme, а не style в определениях кнопок:

<Button android:theme="@style/RedButton"/>

Смотрите AppCompat v21 > Theming и Android Support Library v22.1 - AppCompat в блогах. (примечание о втором сообщении, android:theme поддерживается в API11-, оно просто не выполняет автоматическое наследование от родителя, вам придется указывать его на каждом дочернем устройстве, а не на проблему, но стоит упомянуть - см. сообщение Chris Banes об этом).

Ответ 3

Поместите строку xml ниже в свой "AppTheme" xml, вместо того, чтобы пытаться установить ее из "AppTheme.Button". Это работает для меня на v22.1.1 с не-lollipop устройствами. Я предполагаю, что это ошибка, потому что ваше решение выше отлично работает для леденцов.

<item name="colorButtonNormal">@color/my_color</item>

Ответ 4

Использование:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="buttonStyle">@style/AppTheme.Button</item>
</style>

удалите android:

Ответ 5

Убедитесь, что ваш Activity расширяется AppCompatActivity, в противном случае он не будет корректно обрабатывать стили appCompat.

  • класс: android.support.v7.app.AppCompatActivity
  • Gradle: compile 'com.android.support:appcompat-v7:23.0.1'

Ответ 6

Это работает:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <!-- android:buttonStyle for v21+ and buttonStyle for the rest -->
    <item name="buttonStyle">@style/MyCustomButton</item>
    <item name="android:buttonStyle">@style/MyCustomButton</item>
    <item name="colorButtonNormal">@color/my_color</item>
</style>

<style name="MyCustomButton" parent="Base.Widget.AppCompat.Button">
    <item name="android:textColor">#ffffff</item>
    <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
</style>

colorButtonNormal можно установить в стиле темы. Чтобы изменить цвет текста, размер или любую другую функцию кнопки, вы можете создать стиль, а затем с помощью buttonStyle (меньше, чем v21) или android:buttonStyle (v21 +) в стиле темы, чтобы установить стиль кнопки.

Ответ 7

v21/styles.xml

    <style name="AppTheme.BlueButton" parent="Widget.AppCompat.Button.Colored">
        <item name="android:colorButtonNormal">@color/blue</item>
        <item name="android:textColor">@color/text_white</item>
    </style>

styles.xml

<style name="AppTheme.BlueButton" parent="Widget.AppCompat.Button.Colored">
    <item name="colorButtonNormal">@color/blue_tint</item>
    <item name="android:textColor">@color/text_white</item>
</style>

Изначально я тоже сталкиваюсь с этой проблемой. После исправления, как указано выше, я получил правильную кнопку пользовательского интерфейса

Ответ 8

Если вам интересно, почему colorButtonNormal не выбрано, как определено для отключенных кнопок, вам также может потребоваться установить android:disabledAlpha в 1.0 в теме, иначе ваш цвет по умолчанию будет смешаться с фоном кнопки. Пример:

<style name="MyButtonTheme" parent="ThemeOverlay.AppCompat.Light">
    <item name="android:disabledAlpha">1.0</item>
    <item name="colorButtonNormal">@color/my_solid_disabled_color</item>
    <item name="colorAccent">@color/my_solid_accent_color</item>
    <item name="buttonStyle">@style/my_button_style</item>
</style>

Ответ 9

Привет. Я думаю, что используемый вами дочерний виджет может быть неправильным, он должен android:Widget.Button для API версии 21 или более ранней версии, для более поздней версии 21 или выше вы должны использовать `android: Widget.Material.Button. Пусть говорят, что стиль по умолчанию должен выглядеть ниже.

res/values/styles.xml
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:buttonStyle">@style/AppTheme.Button</item>
    </style>

    <style name="AppTheme.Button" parent="android:Widget.Button">
        <item name="android:background">@color/my_color</item>
        <item name="android:textColor">@android:color/white</item>
    </style>

</resources>

Для API версии 21 файл стиля ресурса должен выглядеть как (res/values-v21/style.xml)

<resources>

    <style name="AppTheme.Button" parent="android:Widget.Material.Button">
        <item name="android:background">@color/my_color</item>
        <item name="android:textColor">@android:color/white</item>
    </style>

</resources>

Спасибо, дайте мне знать, если у вас есть какие-либо вопросы.