Применить backgroundTint к рисунку фона для API 19

backgroundTint правильно применяется к API 23, но не к API 19. Как я могу получить тонировку для API 19 и ниже?

                    <Button
                    android:layout_width="40dp"
                    android:layout_height="40dp"
                    android:id="@+id/AbResetBtn"
                    android:background="@android:drawable/stat_notify_sync"
                    android:backgroundTint="@color/button_material_light" />

Конечно, мой Activity расширяет AppCompatActivity.


person ema3272    schedule 05.12.2015    source источник


Ответы (4)


Это сработало для меня на устройстве API19, поддерживает lib v7

макет

<Button
    android:id="@id/btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/label"
    style="@style/Button"
    />

стили

<style name="Button" parent="Base.TextAppearance.AppCompat.Button" >
    <item name="backgroundTint">@color/fab_bg</item>
</style>
person DoruChidean    schedule 16.02.2017
comment
Это более элегантное решение, чем принятый ответ - оно позволяет избежать необходимости программной установки цветов, не требует прямой ссылки на AppCompatButton и сохраняет весь необходимый код макета в стилях и других файлах XML. Аккуратный и аккуратный. - person BasicPleasureModel; 05.06.2017
comment
Ты прав. Я пробовал это более свежее решение, и оно тоже работает. - person ema3272; 03.09.2017

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

Просто используйте AppCompatButton из библиотеки поддержки с app: namespace.

<android.support.v7.widget.AppCompatButton android:layout_width="40dp"
                    android:layout_height="40dp"
                    android:id="@+id/AbResetBtn"
                    android:background="@android:drawable/stat_notify_sync"
                    app:backgroundTint="@color/button_material_light" />
person Paresh Dudhat    schedule 10.08.2018
comment
Это должен быть принятый ответ в 2019 году. Проще и эффективнее. - person xarlymg89; 19.08.2019

Вам необходимо использовать библиотеку поддержки Android 22.1+, чтобы использовать AppCompatButton http://android-developers.blogspot.se/2015/04/android-support-library-221.html

Но, к сожалению, вы не сможете сделать это в xml.

В onCreate вашей деятельности выполните следующие действия:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AppCompatButton v = (AppCompatButton) findViewById(R.id.mybutton);
        ColorStateList csl = new ColorStateList(new int[][]{new int[0]}, new int[]{0xffffcc00});
        v.setSupportBackgroundTintList(csl);
    }
}

Подробнее здесь: backgroundTint Lollipop не влияет на кнопку

Совет: возможно, вы сможете сделать все в xml, используя app:backgroundTint="@color/button_material_light", но я не проверял.

--РЕДАКТИРОВАТЬ--

Проверьте второй комментарий @ema3272 для полного решения.

person jonathanrz    schedule 05.12.2015
comment
Я использую библиотеку поддержки 23.1.1. На самом деле эта кнопка включена в представление, которое расширяется во фрагменте (это экран справки). Я уже пробовал приведенный выше код в onCreateView в классе Fragment. Однако я получаю сообщение об ошибке компиляции, в котором говорится о неожиданном приведении к AppCompatButton: тег макета был Button. Кстати, проблема уже присутствует при предварительном просмотре экрана справки в Android Studio. И приведенный выше совет по XML тоже не работает. - person ema3272; 05.12.2015
comment
@ema3272 также измените на AppCompatButton в вашем xml - person jonathanrz; 06.12.2015
comment
ХОРОШО. Это решило проблему. Однако преобразования из Button в AppCompatButton недостаточно, вы должны использовать android.support.v7.widget.AppCompatButton в XML и приведенный выше код, чтобы получить правильный результат. Официальная документация по адресу developer.android. com/intl/pt-br/reference/android/support/v7/ говорит, что этот (класс) будет автоматически использоваться, когда вы используете кнопку в своих макетах. Вам нужно только вручную использовать этот класс при написании пользовательских представлений, что неверно. - person ema3272; 06.12.2015

Вы должны обновить «Кнопку» до «androidx.appcompat.widget.AppCompatButton» и «android: backgroundTint» до «app: androidTint».

До:

 <Button
                android:id="@+id/button"
                android:layout_width="200dp"
                android:layout_height="0dp"
                android:textColor="@color/colorAccent"
                android:backgroundTint="@color/colorAccent"
                android:background="@drawable/empty_list_state_button"
                android:text="@string/button_title"
                app:layout_constraintTop_toBottomOf="@id/distance"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                android:layout_marginTop="16dp"
                android:layout_marginBottom="16dp"
                />

После:

 <androidx.appcompat.widget.AppCompatButton
                android:id="@+id/button"
                android:layout_width="200dp"
                android:layout_height="0dp"
                android:textColor="@color/colorAccent"
                app:backgroundTint="@color/colorAccent"
                android:background="@drawable/empty_list_state_button"
                android:text="@string/button_title"
                app:layout_constraintTop_toBottomOf="@id/distance"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                android:layout_marginTop="16dp"
                android:layout_marginBottom="16dp"
                />
person Blazej SLEBODA    schedule 04.01.2019