Почему моя кнопка не отображает установленный стиль? - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь изменить стиль моей кнопки, но она просто не отображает установленный стиль.Он показывает только стиль прямоугольника по умолчанию.Я прочитал официальную документацию для Android "Стиль и темы", и проблема не в иерархии стилей.Вот мой файл макета

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".MainActivity">

<Button
    android:id="@+id/button"
    style="@android:style/Widget.Button.Toggle"
    android:layout_width="125dp"
    android:layout_height="155dp"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:background="@android:color/holo_red_light"
    android:visibility="visible"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.74" />
</android.support.constraint.ConstraintLayout>

и мой styles.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
</resources>

Я также установил представление содержимого с файлом макета выше в моей функции onCreate ().Это как если бы ресурс @android: style не был найден?Пожалуйста, помогите

Я также запустил чистый проект и получил

W/ResourceType(15056): For resource 0x0101053d, entry index(1341) is beyond 
type entryCount(1320)
W/ResourceType(15056): For resource 0x0101053e, entry index(1342) is beyond 
type entryCount(1320)
W/ResourceType(15056): For resource 0x0101053b, entry index(1339) is beyond 
type entryCount(1320)
W/ResourceType(15056): For resource 0x0101053c, entry index(1340) is beyond 
type entryCount(1320)

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Я нашел исходный код , содержащий стиль "Widget.Button.Toggle".Кажется, это старый стиль, я полагаю, что его невозможно использовать с темой приложения AppCompat.

Одна из причин, почему я так думаю, заключается в том, что связанный репозиторий имеет на своем пути имя «пряник»,Другая причина в том, что моя Android Studio (3.3) не знает стиля - если я попытаюсь использовать его, текст станет красным.

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

Шаг 1 Объявите стиль в res / values ​​/ styles.xml и попробуйте использоватьэто с Button:

<style name="MyButtonStyle">
    <item name="android:textColor">#00ff00</item>
</style>

In activity_main.xml

<Button
    android:id="@+id/button"
    style="@style/MyButtonStyle"
    android:layout_width="125dp"
    android:layout_height="155dp"
    android:background="@android:color/holo_red_light"
    android:visibility="visible"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.74"
    android:text="Hello World"/>

Результат:

enter image description here

Шаг 2 Используйте известный стиль AppCompat с Button, например Widget.AppCompat.Button.Borderless.Colored.(Я сохранил фон, просто чтобы показать, что он работает, даже если Button без рамки с фоном звучит немного парадоксально)

<Button
    android:id="@+id/button"
    style="@style/Widget.AppCompat.Button.Borderless.Colored"
    android:layout_width="125dp"
    android:layout_height="155dp"
    android:background="@android:color/holo_red_light"
    android:visibility="visible"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.74"
    android:text="Hello World"/>

Результат:

enter image description here

Шаг 3 (даже более необязательный, чем два других) Выберите стиль AppCompat Button, попробуйте заставить его работать и вернитесь сюда, если вы столкнетесь с ошибкой.

(Общие рекомендации: при необходимости обновите Android Studio до текущей стабильной версии и убедитесь, что вы не смешиваете библиотеки AndroidX и библиотеки поддержки при закрытии зависимостей в файле build.gradle модуля.)

0 голосов
/ 05 февраля 2019

Спасибо всем за ответы, но я обнаружил, что мне нужно было добавить виджет ImageButton на свой лист xml в отличие от виджета Button

0 голосов
/ 31 января 2019

В файле res / values ​​/ styles.xml необходимо определить стиль кнопки, например «MyButtonStyle»

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

</style>

<style name="MyButtonStyle" parent="Widget.AppCompat.Button">
    <item name="android:background">@drawable/button</item>
</style>

В файле res / drawable / button.xml вы определяете базовую линиюстиль для вашей кнопки, который определяется как селектор, ссылающийся на нажатие, и состояния по умолчанию, такие как.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/button_pressed"/>
    <item android:drawable="@drawable/button_normal"/>
</selector>

In res / drawable / button_normal

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="rectangle">
<stroke android:width="1dp"
        android:color="@color/buttonDarkShade"/>
<gradient
    android:type="linear"
    android:angle="90"
    android:startColor="@color/buttonDarkShade"
    android:centerColor="@color/buttonHighlightShade"
    android:endColor="@color/buttonDarkShade"
    />
</shape>

In res / drawable / button_pressed

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

<stroke android:width="4dp"
        android:color="@color/colorPrimaryDark"/>
<gradient
    android:type="linear"
    android:angle="90"
    android:startColor="@color/colorPrimary"
    android:centerColor="@color/buttonHighlightShade"
    android:endColor="@color/colorPrimary"
    />
<corners android:radius="16dp" />
</shape>

Это основной шаблон для создания пользовательской кнопки.Определите res / values ​​/ colors, использованные выше, и измените или добавьте атрибуты селектора и формы, как вы хотите.

и, конечно, когда вы используете стиль кнопки в макете, не забудьте установить стиль

<Button
    android:id="@+id/myCustomStylishButton"
    style="@style/MyButtonStyle"/>
...