Добавление стиля кнопки в AppTheme не работает

#android #button #styles #themes

#Android #кнопка #стили #темы

Вопрос:

Я попытался добавить пользовательский стиль кнопки в свою AppTheme, и он не работает. В качестве ссылки я добавил стиль Spinner в свою AppTheme, и он отлично работает. Итак, мне просто нужно выяснить, где я ошибаюсь со своим стилем кнопки.

style.xml:

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:spinnerStyle">@style/mySpinnerStyle</item>
    <item name="android:buttonStyle">@style/myButtonStyle</item>
    <item name="buttonStyle">@style/myButtonStyle</item>
</style>

<style name="mySpinnerStyle" parent="@style/Widget.AppCompat.Spinner">
    <item name="overlapAnchor">true</item>
    <item name="android:background">@drawable/spinner_background</item>
    <item name="android:padding">5sp</item>
</style>

<style name="myButtonStyle" parent="@style/Widget.AppCompat.Button">
    <item name="android:background">@drawable/button_states</item>
    <item name="android:focusable">true</item>
    <item name="android:clickable">true</item>
</style>
  

Я могу добавить свой button_states.xml файл, если необходимо, но знайте, что стиль работает, если я вставлю свой стиль непосредственно в атрибут кнопки в моем макете, как показано ниже:

 <Button
    android:id="@ id/button_1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="4"
    style="@style/myButtonStyle"
    android:textSize="@dimen/text_size"
    android:text="OK" />
  

Объявление в родительском макете:

 android:theme="@style/AppTheme"
  

Итак, почему это работает непосредственно в атрибуте кнопки, но не через мою AppTheme?

Комментарии:

1. Родительским темам не нужен @style. И попробуйте оставить тему приложения в манифесте, чтобы было проще управлять

2. Спасибо за ваш отзыв. Я применил ваши предложения, и теперь все работает. Удаление @style из родительского элемента в «MyButtonStyle» заставило его работать. Хотя изменения стиля не отображаются в предварительном просмотре в IDE, они отображаются только при запуске приложения. Есть мысли?

Ответ №1:

1- Создайте новый ФАЙЛ С ВОЗМОЖНОСТЬЮ РИСОВАНИЯ, щелкнув правой кнопкой мыши на res / drawable file в вашей Android studio

2- напишите в нем такой код :-

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <corners
android:radius="100dp"
        />
    <solid
        android:color="#FFFFFF"

        />
    <size
        android:width="100dp"
        android:height="100dp"
        />

</shape>
  

3- откройте свой XML-файл, содержащий эту кнопку, и измените фон кнопки на тот, который вы создали ранее

Комментарии:

1. Спасибо, да, у меня есть аналогичный файл для моих кнопок. Я не показывал этот файл, потому что знал, что ошибка была где-то в коде, который я показывал.

Ответ №2:

Спасибо Ахмаду Саттауту за ответ.

В моем стиле кнопки я удалил @style из родительского:

оригинал:

 <style name="myButtonStyle" parent="@style/Widget.AppCompat.Button">
    <item name="android:background">@drawable/button_states</item>
    <item name="android:focusable">true</item>
    <item name="android:clickable">true</item>
</style>
  

изменено:

 <style name="myButtonStyle" parent="Widget.AppCompat.Button">
    <item name="android:background">@drawable/button_states</item>
    <item name="android:focusable">true</item>
    <item name="android:clickable">true</item>
</style>
  

Если кто-нибудь может более подробно объяснить, почему это происходит, это было бы с благодарностью.

Комментарии:

1. Это просто неправильная компиляция. Стили, как правило, ничего не говорят вам о том, что не так или что не так. Вы добавили @style, но студия не знает, правильно это или неправильно