Есть ли способ изменить видимость элемента при переключении темы приложения из стилей. xml? - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь добиться эффекта, когда эта звездная фоновая анимация видна / исчезла в зависимости от выбранной темы приложения.

<com.starry.animation
        android:id="@+id/stars"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:starsView_bigStarThreshold="10dp"
        app:starsView_meteoritesColors="@array/meteorites_colors"
        app:starsView_meteoritesEnabled="true"
        app:starsView_meteoritesInterval="2000"
        app:starsView_maxStarSize="3dp"
        app:starsView_minStarSize="1dp"
        android:visibility="?visibilityMode"
        android:background="@android:color/transparent"
        app:starsView_starColors="@array/star_colors_small"
        app:starsView_starCount="100" />

Я объявил visibilityMode в стилях. xml как строковый атрибут

<attr name="visibilityMode" format="string" />

и в моей пользовательской теме как:

<item name="visibilityMode">GONE</item>

Это приводит в ошибке, раздувающей вид звезд. Есть ли какая-то другая реализация, которой я могу достичь аналогичного результата?

1 Ответ

0 голосов
/ 20 апреля 2020

На самом деле видимость - это не строка, а целое число.
0 используется для видимого начального состояния.
2 используется для пропущенного начального состояния
(не путайте с View.Gone и View.Visible).

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

<attr name="visibilityMode" format="integer">
  <!-- Visible on screen; the default value. -->
    <enum name="visible" value="0" />
    <!-- Completely hidden, as if the view had not been added. -->
    <enum name="gone" value="2" />
</atrr>

Чем его можно использовать в теме: <item name="visibilityMode">gone</item>

и в элементе макета: android:visibility="?visibilityMode"

Пожалуйста, проверьте этот ответ

...