Кнопки раскраски в Android с материальным дизайном и AppCompat

Прежде чем обновление AppCompat появилось сегодня, я смог изменить цвет кнопок в Android L, но не в старых версиях. После включения нового обновления AppCompat я не могу изменить цвет для любой версии, когда я пытаюсь, кнопка просто исчезает. Кто-нибудь знает, как изменить цвет кнопки?

На следующих рисунках показано, чего я хочу достичь:

picture showing desired result

Белая кнопка по умолчанию, красный - это то, что я хочу.

Это то, что я делал ранее, чтобы изменить цвет кнопок в styles.xml:

<item name="android:colorButtonNormal">insert color here</item>

и сделать это динамически:

button.getBackground().setColorFilter(getResources().getColor(insert color here), PorterDuff.Mode.MULTIPLY);

Также я изменил родительскую тему от @android:style/Theme.Material.Light.DarkActionBar до Theme.AppCompat.Light.DarkActionBar

Ответ 1

Официально зафиксировано в библиотеке поддержки rev.22 (Пт 13 марта 2015 г.). См. Соответствующую проблему с кодом Google:

https://issuetracker.google.com/issues/37008632

Пример использования

theme.xml:

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

v21/theme.xml

<item name="android:colorButtonNormal">@color/button_color</item>

Ответ 2

Изменить (22.06.2016):

Библиотека Appompat начала поддерживать кнопки материалов после того, как я отправил исходный ответ. В этом сообщении вы можете увидеть самую легкую реализацию поднятых и плоских кнопок.

Исходный ответ:

Так как AppCompat не поддерживает кнопку, вы можете использовать xml в качестве фона. Для этого я взглянул на исходный код Android и нашел связанные файлы для кнопок с элементами стиля.

1 - Посмотрите на оригинальную реализацию кнопки материала из источника.

Посмотрите btn_default_material.xml на исходный код Android.

Вы можете скопировать файл в папку drawable-v21. Но не прикасайтесь к цвету attr здесь. Файл, который вам нужно изменить, - это второй файл.

вытяжка-V21/custom_btn.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
    <item android:drawable="@drawable/btn_default_mtrl_shape" />
</ripple>

2 - Получить форму кнопки исходного материала

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

<inset xmlns:android="http://schemas.android.com/apk/res/android"
   android:insetLeft="@dimen/button_inset_horizontal_material"
   android:insetTop="@dimen/button_inset_vertical_material"
   android:insetRight="@dimen/button_inset_horizontal_material"
   android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
    <corners android:radius="@dimen/control_corner_material" />
    <solid android:color="?attr/colorButtonNormal" />
    <padding android:left="@dimen/button_padding_horizontal_material"
             android:top="@dimen/button_padding_vertical_material"
             android:right="@dimen/button_padding_horizontal_material"
             android:bottom="@dimen/button_padding_vertical_material" />
</shape>

3 - Получение размеров кнопки материала

И в этом файле вы найдете некоторые размеры, используемые в файле который вы можете найти здесь. Вы можете скопировать весь файл и поместить его в папку values ​​. Это важно для применения того же размера (который используется в кнопках материала) ко всем кнопкам

4 - Создайте еще один файл для старых версий

Для более старых версий у вас должен быть другой вариант с одинаковым именем. Я просто помещаю элементы inline вместо ссылки. Вы можете обратиться к ним. Но опять же, самое главное - это оригинальные размеры кнопки материала.

вытяжка /custom _btn.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- pressed state -->
    <item android:state_pressed="true">
        <inset xmlns:android="http://schemas.android.com/apk/res/android"
            android:insetLeft="@dimen/button_inset_horizontal_material"
            android:insetTop="@dimen/button_inset_vertical_material"
            android:insetRight="@dimen/button_inset_horizontal_material"
            android:insetBottom="@dimen/button_inset_vertical_material">
            <shape android:shape="rectangle">
                <corners android:radius="@dimen/control_corner_material" />
                <solid android:color="@color/PRESSED_STATE_COLOR" />
                <padding android:left="@dimen/button_padding_horizontal_material"
                    android:top="@dimen/button_padding_vertical_material"
                    android:right="@dimen/button_padding_horizontal_material"
                    android:bottom="@dimen/button_padding_vertical_material" />
            </shape>
        </inset>
    </item>

    <!-- focused state -->
    <item android:state_focused="true">
        <inset xmlns:android="http://schemas.android.com/apk/res/android"
            android:insetLeft="@dimen/button_inset_horizontal_material"
            android:insetTop="@dimen/button_inset_vertical_material"
            android:insetRight="@dimen/button_inset_horizontal_material"
            android:insetBottom="@dimen/button_inset_vertical_material">
            <shape android:shape="rectangle">
                <corners android:radius="@dimen/control_corner_material" />
                <solid android:color="@color/FOCUSED_STATE_COLOR" />
                <padding android:left="@dimen/button_padding_horizontal_material"
                    android:top="@dimen/button_padding_vertical_material"
                    android:right="@dimen/button_padding_horizontal_material"
                    android:bottom="@dimen/button_padding_vertical_material" />
            </shape>
        </inset>
    </item>

    <!-- normal state -->
    <item>
        <inset xmlns:android="http://schemas.android.com/apk/res/android"
            android:insetLeft="@dimen/button_inset_horizontal_material"
            android:insetTop="@dimen/button_inset_vertical_material"
            android:insetRight="@dimen/button_inset_horizontal_material"
            android:insetBottom="@dimen/button_inset_vertical_material">
            <shape android:shape="rectangle">
                <corners android:radius="@dimen/control_corner_material" />
                <solid android:color="@color/NORMAL_STATE_COLOR" />
                <padding android:left="@dimen/button_padding_horizontal_material"
                    android:top="@dimen/button_padding_vertical_material"
                    android:right="@dimen/button_padding_horizontal_material"
                    android:bottom="@dimen/button_padding_vertical_material" />
            </shape>
        </inset>
    </item>
</selector>

Результат

Ваша кнопка будет иметь эффект пульсации на устройствах Lollipop. Старые версии будут иметь точно такую ​​же кнопку, кроме эффекта пульсации. Но с тех пор, как вы предоставляете drawables для разных состояний, они также будут реагировать на события касания (как старый).

Ответ 3

Это было улучшено в v23.0.0 библиотеки AppCompat с добавлением большего количества тем, включая

Widget.AppCompat.Button.Colored

Прежде всего, укажите зависимость appCompat, если вы еще не

compile('com.android.support:appcompat-v7:23.0.0') {
    exclude group: 'com.google.android', module: 'support-v4'
}

теперь, так как вам нужно использовать v23 для приложения, вам также понадобится настроить SDK-v23!

    compileSdkVersion = 23
    targetSdkVersion = 23

В values/theme

<item name="android:buttonStyle">@style/BrandButtonStyle</item>

В values/style

<style name="BrandButtonStyle" parent="Widget.AppCompat.Button.Colored">
    <item name="colorButtonNormal">@color/yourButtonColor</item>
    <item name="android:textColor">@color/White</item>
</style>

В values-v21/style

<style name="BrandButtonStyle" parent="Widget.AppCompat.Button.Colored">
    <item name="android:colorButtonNormal">@color/yourButtonColor</item>
    <item name="android:textColor">@color/White</item>
</style>

Так как тема вашей кнопки основана на Widget.AppCompat.Button.Colored Цвет текста на кнопке по умолчанию белый!

но кажется, что есть проблема, когда вы отключите кнопку, кнопка изменит цвет на светло-серый, но цвет текста останется белым!

Обходной путь для этого - установить цвет текста на кнопке на белый! как я сделал в стиле, показанном выше.

теперь вы можете просто определить свою кнопку и позволить AppCompat сделать остальные:)

<Button
        android:layout_width="200dp"
        android:layout_height="48dp" />

Отключено состояние Отключено состояние

Включенное состояние Включенное состояние

Ответ 4

В Android Support Library 22.1.0 Google высветил значок Button. Таким образом, другой способ настроить цвет фона кнопки - использовать атрибут backgroundTint.

Например,

<Button
       android:id="@+id/add_remove_button"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:backgroundTint="@color/bg_remove_btn_default"
       android:textColor="@android:color/white"
       tools:text="Remove" />

Ответ 5

Для поддержки цветных кнопок используйте последнюю библиотеку AppCompat (> 23.2.1) с помощью:

раздуть - XML

Виджет AppCompat:

android.support.v7.widget.AppCompatButton

Стиль AppCompat:

style="@style/Widget.AppCompat.Button.Colored"

NB! Чтобы установить собственный цвет в xml: используйте app attr: app вместо android

(используйте приложение alt+enter или объявите xmlns:app="http://schemas.android.com/apk/res-auto" чтобы использовать app)

app: backgroundTint = "@color/your_custom_color"

Пример:

<android.support.v7.widget.AppCompatButton
     style="@style/Widget.AppCompat.Button.Colored"
     app:backgroundTint="@color/your_custom_color"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"     
     android:text="Colored Button"/>

или установить его программно - JAVA

 ViewCompat.setBackgroundTintList(your_colored_button,
 ContextCompat.getColorStateList(getContext(),R.color.your_custom_color));

Ответ 6

С помощью последней библиотеки поддержки вы можете просто наследовать свою активность от AppCompatActivity, поэтому она будет раздувать ваш Button как AppCompatButton и даст вам возможность задать цвет каждой отдельной кнопки на макете с использованием android:theme="@style/SomeButtonStyle", где SomeButtonStyle:

<style name="SomeButtonStyle" parent="@android:style/Widget.Button">
    <item name="colorButtonNormal">@color/example_color</item>
</style>

Работал для меня в 2.3.7, 4.4.1, 5.0.2

Ответ 7

если вы хотите ниже стиль

введите описание изображения здесь

добавьте этот стиль в свою кнопку

style="@style/Widget.AppCompat.Button.Borderless.Colored"

если вы хотите этот стиль

введите описание изображения здесь

добавить код ниже

style="@style/Widget.AppCompat.Button.Colored"

Ответ 8

Ответ в ТЕМА не стиль

Проблема заключается в том, что цвет кнопки имеет значение colorButtonNormal темы. Я попытался изменить стиль разными способами без везения. Итак, я изменил тему кнопки.

Создайте тему с помощью colorButtonNormal и colorPrimary:

<style name="ThemeAwesomeButtonColor" parent="AppTheme">
    <item name="colorPrimary">@color/awesomePrimaryColor</item>
    <item name="colorButtonNormal">@color/awesomeButtonColor</item>
</style>

Используйте эту тему в кнопке

<Button
        android:id="@+id/btn_awesome"
        style="@style/AppTheme.Button"
        android:theme="@style/ThemeAwesomeButtonColor"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn_awesome"/>

"AppTheme.Button" может быть любой вещью, расширяющей стиль Button, как здесь, я использую основной цвет для цвета текста:

<style name="AppTheme.Button" parent="Base.Widget.AppCompat.Button">
    ...
    <item name="android:textColor">?attr/colorPrimary</item>
    ...
</style>

И вы получаете кнопку любого цвета, который вы хотите, совместимый с материальным дизайном.

Ответ 9

Я только что создал андроидную библиотеку, которая позволяет легко изменять цвет кнопки и цвет пульсации

https://github.com/xgc1986/RippleButton

<com.xgc1986.ripplebutton.widget.RippleButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/btn"
    android:text="Android button modified in layout"
    android:textColor="@android:color/white"
    app:buttonColor="@android:color/black"
    app:rippleColor="@android:color/white"/>

Вам не нужно создавать стиль для каждой кнопки, которую вы хотите, с другим цветом, позволяя произвольно настраивать цвета

Ответ 10

эта работа для меня с appcompat-v7: 22.2.0 в android + 4.0

в ваших styles.xml

<style name="Button.Tinted" parent="Widget.AppCompat.Button">
    <item name="colorButtonNormal">YOUR_TINT_COLOR</item>
    <item name="colorControlHighlight">@color/colorAccent</item>
    <item name="android:textColor">@android:color/white</item>
</style>

в вашем файле макета

<Button
    android:id="@+id/but_next"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/but_continue"
    android:theme="@style/Button.Tinted" />

Ответ 11

Разметка:

<android.support.v7.widget.AppCompatButton
  style="@style/MyButton"
  ...
  />

styles.xml:

<style name="MyButton" parent="Widget.AppCompat.Button.Colored">
  <item name="backgroundTint">@color/button_background_selector</item>
  <item name="android:textColor">@color/button_text_selector</item>
</style>

цвет /button _background_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="#555555"/>
    <item android:color="#00ff00"/>
</selector>

цвет /button _text_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="#888888"/>
    <item android:color="#ffffff"/>
</selector>

Ответ 12

Для тех, кто использует ImageButton, вот как вы это делаете:

В style.xml:

<style name="BlueImageButton" parent="Base.Widget.AppCompat.ImageButton">
    <item name="colorButtonNormal">@color/primary</item>
    <item name="android:tint">@color/white</item>
</style>

в v21/style.xml:

<style name="BlueImageButton" parent="Widget.AppCompat.ImageButton">
    <item name="android:colorButtonNormal">@color/primary</item>
    <item name="android:tint">@color/white</item>
</style>

Затем в вашем файле макета:

<android.support.v7.widget.AppCompatImageButton
    android:id="@+id/my_button"
    android:theme="@style/BlueImageButton"
    android:layout_width="42dp"
    android:layout_height="42dp"
    android:layout_gravity="center_vertical"
    android:src="@drawable/ic_check_black_24dp"
    />

Ответ 13

Если вы используете решение стиля с помощью colorButtonNormal, не забудьте наследовать от Widget.AppCompat.Button.Colored, чтобы эффект ряби работал;)

Как

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

Ответ 14

Если вы хотите только кнопку "Плоский" материал, вы можете настроить их фон, используя selectableItemBackground как объяснено .

Ответ 15

Для меня проблема заключалась в том, что в Android 5.0 android:colorButtonNormal не было никакого эффекта, и фактически, ни один элемент из темы (например, android:colorAccent), но, например, в Android 4.4.3. Проект был сконфигурирован с compileSdkVersion и targetSdkVersion до 22, поэтому я внес все изменения, как @Muhammad Alfaifi sugessted, но в конце я заметил, что проблема была buildToolsVersion, который не был обновлен. Как только я изменился на 23.0.1, все начинает работать почти как обычно. Теперь android:colorButtonNormal по-прежнему не действует, но по крайней мере кнопка реагирует на android:colorAccent, что для меня приемлемо.

Я надеюсь, что этот намек может помочь кому-то. Примечание. Я применил стиль непосредственно к кнопке, так как кнопка android:theme=[...] также не имела эффекта.

Ответ 16

Один из способов вытянуть это означает, что вы просто указываете на стиль и NOT тему. Все кнопки в вашем приложении одинаковы.
В theme.xml добавьте тему

    <style name="Theme.MyApp.Button.Primary.Blue" parent="Widget.AppCompat.Button">
        <item name="colorButtonNormal">@color/someColor</item>
        <item name="android:textColorPrimary">@android:color/white</item>
    </style>

Теперь в styles.xml добавьте

    <style name="MyApp.Button.Primary.Blue" parent="">
        <item name="android:theme">@style/Theme.MyApp.Button.Primary.Blue</item>
    </style>

Теперь в вашем макете просто укажите STYLE в вашей кнопке

    <Button
        ...
        style="@style/MyApp.Button.Primary.Blue"
        ...  />

Ответ 17

UPDATE

Используйте библиотеку поддержки дизайна (23.2.0) и appcompatwidgets, как показано ниже

В Android Support Library 22.1:

Это делается автоматически при раздувании макетов - замена кнопки с AppCompatButton, TextView с AppCompatTextView и т.д., чтобы обеспечить что каждый может поддерживать тонирование. В этом выпуске эти оттенки теперь доступны общедоступные виджеты, позволяющие сохранять тонирование даже если вам нужно подклассифицировать один из поддерживаемых виджетов.

Полный список виджетов:

AppCompatAutoCompleteTextView
AppCompatButton
AppCompatCheckBox
AppCompatCheckedTextView
AppCompatEditText
AppCompatMultiAutoCompleteTextView
AppCompatRadioButton
AppCompatRatingBar
AppCompatSpinner
AppCompatTextView

Конструкция материалов для предустановленных устройств Lollipop:

AppCompat (он же ActionBarCompat) начал работать как резервный Android 4.0 ActionBar API для устройств, работающих на Gingerbread, обеспечивая общий уровень API поверх реализации с резервным копированием и каркасная реализация. AppCompat v21 предоставляет API и набор функций, обновляемый с Android 5.0


Ответ 18

Если вы хотите использовать стиль AppCompat, например Widget.AppCompat.Button, Base.Widget.AppCompat.Button.Colored и т.д., вам нужно использовать эти стили с совместимыми представлениями из библиотеки поддержки.

Код ниже не работает для прелолипопных устройств:

<Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:theme="@style/Widget.AppCompat.Button" />

Вам нужно использовать AppCompatButton для включенных стилей AppCompat:

<android.support.v7.widget.AppCompatButton
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:theme="@style/Widget.AppCompat.Button" />

Ответ 19

Я использую это. Эффект пульсации и нажатие кнопки мыши.

style.xml

<style name="Button.Red" parent="Widget.AppCompat.Button.Colored">
    <item name="android:textColor">@color/material_white</item>
    <item name="android:backgroundTint">@color/red</item>
</style>

Кнопка на макете:

<Button
        style="@style/Button.Red"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/close"/>

Ответ 20

Я действительно не хотел менять свои пользовательские стили кнопок, но, к сожалению, они больше не работали.

Мое приложение имеет minSdkVersion 9 и все работает до этого.

Я не знаю, почему, но так как я удалил андроид: перед buttonStyle, похоже, снова работает

now = working:

<item name="buttonStyle">@style/ButtonmyTime</item>

before = просто кнопки с серым материалом:

<item name="android:buttonStyle">@style/ButtonmyTime</item>

У меня нет специальной папки для новой версии Android, так как мои кнопки довольно плоские, и они должны выглядеть одинаково во всех версиях Android.

Может кто-то может сказать мне, почему мне пришлось удалить "андроид": ImageButton все еще работает с "android:"

<item name="android:imageButtonStyle">@style/ImageButtonmyTimeGreen</item>

Ответ 21

Спустя 2 дня, в поисках ответов, тематическая тематика не работала для меня в API < 21.

Мое единственное решение - переопределить отображение AppCompatButton не только с темой базового приложения "colorButtonNormal", но также и с фоном backgroundview:

public class AppCompatColorButton extends AppCompatButton {

    public AppCompatColorButton(Context context) {
        this(context, null);
    }

    public AppCompatColorButton(Context context, AttributeSet attrs) {
        this(context, attrs, android.support.v7.appcompat.R.attr.buttonStyle);
    }

    public AppCompatColorButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        if (TintManager.SHOULD_BE_USED) {
            setSupportBackgroundTintList(createButtonColorStateList(getContext(), attrs, defStyleAttr));
        }
    }

    static final int[] DISABLED_STATE_SET = new int[]{-android.R.attr.state_enabled};
    static final int[] FOCUSED_STATE_SET = new int[]{android.R.attr.state_focused};
    static final int[] PRESSED_STATE_SET = new int[]{android.R.attr.state_pressed};
    static final int[] EMPTY_STATE_SET = new int[0];

    private ColorStateList createButtonColorStateList(Context context, AttributeSet attrs, int defStyleAttr) {
        final int[][] states = new int[4][];
        final int[] colors = new int[4];
        int i = 0;

        final int themeColorButtonNormal = ThemeUtils.getThemeAttrColor(context, android.support.v7.appcompat.R.attr.colorButtonNormal);
        /*TypedArray a = context.obtainStyledAttributes(attrs, new int[] { android.R.attr.backgroundTint }, defStyleAttr, 0);
        final int colorButtonNormal = a.getColor(0, themeColorButtonNormal);*/
        TypedArray a = context.obtainStyledAttributes(attrs, android.support.v7.appcompat.R.styleable.View, defStyleAttr, 0);
        final int colorButtonNormal = a.getColor(android.support.v7.appcompat.R.styleable.View_backgroundTint, themeColorButtonNormal);
        a.recycle();
        final int colorControlHighlight = ThemeUtils.getThemeAttrColor(context, android.support.v7.appcompat.R.attr.colorControlHighlight);

        // Disabled state
        states[i] = DISABLED_STATE_SET;
        colors[i] = ThemeUtils.getDisabledThemeAttrColor(context, android.support.v7.appcompat.R.attr.colorButtonNormal);
        i++;

        states[i] = PRESSED_STATE_SET;
        colors[i] = ColorUtils.compositeColors(colorControlHighlight, colorButtonNormal);
        i++;

        states[i] = FOCUSED_STATE_SET;
        colors[i] = ColorUtils.compositeColors(colorControlHighlight, colorButtonNormal);
        i++;

        // Default enabled state
        states[i] = EMPTY_STATE_SET;
        colors[i] = colorButtonNormal;
        i++;

        return new ColorStateList(states, colors);
    }
}

Затем вы можете определить цвет кнопки следующим образом:

<com.example.views.AppCompatColorButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:backgroundTint="#ffff0000"
            app:backgroundTint="#ffff0000"
            android:text="Button"
            android:textColor="@android:color/white" />

Ответ 22

Чтобы изменить цвет одной кнопки

ViewCompat.setBackgroundTintList(button, getResources().getColorStateList(R.color.colorId));

Ответ 23

Этот ответ SO помог мне прийти к ответу fooobar.com/questions/12847/...

Я использую этот метод утилиты для установки фонового оттенка кнопки. Он работает с предустановленными устройствами:

// Set button background tint programmatically so it is compatible with pre-lollipop devices.
public static void setButtonBackgroundTintAppCompat(Button button, ColorStateList colorStateList){
    Drawable d = button.getBackground();
    if (button instanceof AppCompatButton) {
        // appcompat button replaces tint of its drawable background
        ((AppCompatButton)button).setSupportBackgroundTintList(colorStateList);
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        // Lollipop button replaces tint of its drawable background
        // however it is not equal to d.setTintList(c)
        button.setBackgroundTintList(colorStateList);
    } else {
        // this should only happen if
        // * manually creating a Button instead of AppCompatButton
        // * LayoutInflater did not translate a Button to AppCompatButton
        d = DrawableCompat.wrap(d);
        DrawableCompat.setTintList(d, colorStateList);
        button.setBackgroundDrawable(d);
    }

}

Как использовать в коде:

Utility.setButtonBackgroundTintAppCompat(myButton,
ContextCompat.getColorStateList(mContext, R.color.your_custom_color));

Таким образом, вам не нужно указывать ColorStateList, если вы просто хотите изменить оттенок фона и не более, но поддерживать красивые эффекты кнопок, а что нет.

Ответ 24

Еще одно простое решение с помощью AppCompatButton

<android.support.v7.widget.AppCompatButton
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     style="@style/Widget.AppCompat.Button.Colored"
     app:backgroundTint="@color/red"
     android:text="UNINSTALL" />

Ответ 25

Я установил android:textColor @null в моей теме кнопки, и это помогает.

styles.xml

<style name="Button.Base.Borderless" parent="Widget.AppCompat.Button.Borderless.Colored">
    <item name="android:textColor">@null</item>
</style>

some_layout.xml

<Button
    style="@style/Button.Base.Borderless"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hint" />

Теперь цвет текста кнопки colorAccent определен в AppTheme

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="colorAccent">@color/colorAccent</item>
    <item name="borderlessButtonStyle">@style/Button.Base.Borderless</item>
    <item name="alertDialogTheme">@style/AlertDialog</item>
</style>

Ответ 26

используйте android: backgroundTint = "@color/customColor", и это даст настраиваемый цвет кнопке. Это просто.