#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, но студия не знает, правильно это или неправильно