Autor Wątek: [Android] Czarne prostokąty zamiast tekstu w UI  (Przeczytany 5290 razy)

Offline mihu

  • Użytkownik
    • mihu

# Kwiecień 29, 2015, 13:26:57
Trochę mało gamedevowe pytanie - sorry.

Od tygodnia dostaję od userów appki androidowej bug reporty, które opisują coś takiego (screenshoty od jednego z użytkowników):

http://madscientist.pl/temp/bug0.png
http://madscientist.pl/temp/bug1.png

Tam gdzie są czarne prostokąciki powinien być biały tekst (i nie tylko tam, ale na reszcie ekranu jest czarne tło i prostokącików nie widać). Najwyraźniej nie dzieje się to cały czas, tylko czasami. Np. jedna osoba napisała, że po drugim otwarciu okienka z ustawieniami problem znika. Ale już innej osobie działa prawidłowo przy pierwszym uruchomieniu aplikacji, a potem już nie.

Aplikacja ma tryb animowanej tapety oraz "zwykłej" aplikacji. W obu trybach wyświetla się to okienko z ustawieniami i najwyraźniej w obu pojawia się problem.

Najśmieszniejsze jest to, że błąd pojawił się nagle. Bug reporty zaczęły spływać tydzień temu, więc najpierw pomyślałem że wprowadziłem błąd przy ostatniej aktualizacji (która jednak była już miesiąc temu), ale wysłałem starą wersję do jednego z użytkowników i nadal ma ten sam problem!

Pomyślałem więc że może ostatnie aktualizacje Androida (5.1) coś pozmieniały, ale ta sama osoba odpala aplikację na 4.4.4 i 5.0.2.

Więc podsumowując, przez dwa lata aplikacja działała, problem się pojawił nagle, nie wydaje się mieć związku z wersją systemu ani z aktualizacją apki, i nigdzie w Internecie nie znalazłem opisu podobnego problemu...

Także będę wdzięczny za wszystkie pomysły, nawet bardzo głupie.

PS. Jeśli tego jasno nie wytłumaczyłem, to oczywiście na moich urządzeniach tego problemu nie ma, więc działam na ślepo.
« Ostatnia zmiana: Kwiecień 29, 2015, 13:30:29 wysłana przez mihu »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline BrunonDEV

  • Użytkownik
    • Construgia -- RPG

# Kwiecień 29, 2015, 15:59:10
Pokaż kod.

Offline mawpa

  • Użytkownik

# Kwiecień 29, 2015, 16:46:05
Android jest "dosyć" kapryśny, jeśli chodzi o zmiany wyglądu różnych elementów interfejsu. Może to wina konkretnej nakładki UI producenta telefonu, może nie ustawiłeś gdzieś koloru tekstu na biały. Możemy sobie gdybać, jeśli nie pokażesz styles.xml

Offline mihu

  • Użytkownik
    • mihu

# Kwiecień 29, 2015, 17:31:45
W styles.xml dla wersji >= 11 (czyli w katalogu values-v11) jest tylko

<resources>
    <style name="AppTheme" parent="android:Theme.Holo.NoActionBar.Fullscreen" />
</resources>
i ten styl jest ustawiony.

Zapisy w layoutach to najpostsze:
    <TextView
        android:id="@+id/textDemoPre1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Load or save user preset"
        android:textColor="#EEEEEE"
        android:textAppearance="?android:attr/textAppearanceMedium" />

Generalnie wybrany theme narzuca jasny kolor tekstu, plus w większości kontrolek mam go ręcznie ustawiony tak jak tutaj.

Nie używałem strings.xml do tej pory. Aktualnie czekam na odpowiedź od usera czy przerzucenie tam tekstów pomogło, ale to raczej nie to.

Zauważ że nie jest po prostu tak, że tekst jest czarny zamiast białego, tylko są jakieś same czarne kwadraciki o wielkościach liter, tak jakby brakowało tekstury przy renderowaniu tekstu. Więc nie jestem przekonany czy chodzi o złe ustawienie jakichś parametrów interfejsu.
« Ostatnia zmiana: Kwiecień 29, 2015, 17:34:54 wysłana przez mihu »

Offline mawpa

  • Użytkownik

  • +1
# Kwiecień 29, 2015, 19:16:26
Problem leży najprawdopodobniej tu:
android:textAppearance="?android:attr/textAppearanceMedium"Źródło

Jak mówiłem, Android czasami robi dziwne rzeczy. W swoich projektach staram się unikać używania rzeczy, które mogą mi namieszać z tym, co już mam. Bardzo możliwe, że textAppearanceMedium w tamtej konkretnej implementacji ustawia kolor tekstu na kolor tła i przez to widać tylko prostokąty. Jeśli od textAppearanceMedium oczekujesz tylko innego rozmiaru czcionki, to ustawiłbym go przez android:textSize. Jeśli koniecznie chcesz użyć textAppearance, to sprawdź, czy coś się zmieni, jeśli będzie ustawiony linijkę wyżej niż textColor.

Generalnie jeśli wszystkie TextView mają jakieś wspólne atrybuty, to prościej i bardziej elegancko będzie, kiedy wydzielisz je do osobnego stylu w styles.xml:
<style name="MyTextView">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textColor">#EEEEEE</item>
    <item name="android:textSize">12sp</item>
</style>
Możesz potem tego użyć w ten sposób:
<TextView style="@style/MyTextView">