Android Question Missing fonts in app

Lukasz

New Member
Licensed User
Longtime User
Hi to All,

I'm looking for solution of my problem with missing font on buttons and labels.
App is very simple. There are two labels to display number from 0 to 50000.
Second label is displaying calculated data according to data sheet of weighing errors.
Then are few buttons:
- numbers 0 to 9
- exit button
All buttons and labels are defined manually, without using designer.
I done this, to have autoscalling for different screens.

If I create screen on designer, compile and run on phone - all text are visible.

When I created the app, my phone was running on Android 4.4.
When system is updated via OTA from 4.4 to 5.1- app is working properly.
When apk file is installed on Android 5 and above, all texts on labels and buttons are missing.

Version of B4A is 3.8
SDK manager is up to date.

In attached files are pictures showing the app.

program OK.png missing fonts.png
Here is complete code:
B4X:
#Region  Project Attributes
    #ApplicationLabel: Standard deviation
    #FullScreen: False
    #IncludeTitle: False
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: portrait
    #CanInstallToExternalStorage: True
   
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim Timer1 As Timer 'tutaj wykorzystujemy timer do odliczania zadango czasu, ponizej jest konfiguracja
   
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    Dim pierwsza_leg As Label 'tutaj wyswietlam odch std, dla pierwszej legalizacji
    Dim ponowna_leg As Label 'tutaj wyswietlam odch std, dla ponownej legalizacji
    'Dim waga_opakowania As EditText 'pole do wprowadzenia wagi
   
    Dim do_ustawienia_koloru As ColorDrawable
   
    Dim dop_odch_std_pierwsze As Float
    'Dim dop_odch_std_kolejne As Float

    Dim quit As Button'deklaracja przyciskow

    Dim padding As Float                             'zmienna do ustawiania wielkosci tekstu
    Dim dens As Float                                'tutaj wpisywana jest wielkosc gestosci ekranu
   
    ' zmienne potrzebne do obslugi klawiatury ekranowej
    Dim klawisz_1, klawisz_2, klawisz_3, klawisz_4, klawisz_5 As Button
    Dim klawisz_6, klawisz_7, klawisz_8, klawisz_9, klawisz_0 As Button
    Dim klawisz_zeruj As Button
   
    Dim klawisze() As Button
   
    Dim licznik_cyfry As Byte
    Dim cala_liczba As String
   


End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    ' tutaj jest start aplikacji, odpowiednik formload z VB
'    Activity.LoadLayout("ekran")'zaladowanie ekranu z designera
   
    'potrzebne do poprawnej inicjalizacji
    klawisze = Array As Button(klawisz_1, klawisz_2, klawisz_3, klawisz_4, klawisz_5, klawisz_6, klawisz_7, klawisz_8, klawisz_9, klawisz_0, klawisz_zeruj)
   
    'inicjalizacja klawiszy w petli, dodawanie widokow
    For licznik_cyfry = 0 To 10
        klawisze(licznik_cyfry).Initialize("klawisze")
        Activity.AddView(klawisze(licznik_cyfry), 1dip, 1dip, 1dip, 1dip)
    Next
   
    pierwsza_leg.Initialize("pierwsza_leg"):ponowna_leg.Initialize("ponowna_leg")
    'waga_opakowania.Initialize("waga_opakowania")
    quit.Initialize("quit")
    Activity.AddView(pierwsza_leg, 1dip, 1dip, 1dip, 1dip) : Activity.AddView(ponowna_leg, 1dip, 1dip, 1dip, 1dip)
    Activity.AddView(quit, 1dip, 1dip, 1dip, 1dip)'Activity.AddView(waga_opakowania, 1dip, 1dip, 1dip, 1dip)
   
    ' Tutaj poniższy kod ustawia kolory dla danego elementu na ekranie
       
        do_ustawienia_koloru.Initialize(Colors.Gray, 5dip)
        pierwsza_leg.Background = do_ustawienia_koloru
        pierwsza_leg.TextColor=Colors.RGB(100,0,0)
        do_ustawienia_koloru.Initialize(Colors.Gray, 5dip)
        ponowna_leg.Background = do_ustawienia_koloru
        ponowna_leg.TextColor=Colors.RGB(0,100,0)


    ' Poniższy kod ustawia jakies tlo dla knefla i kolor napisu
    ' do_ustawienia_koloru.Initialize(Colors.black, 10dip)
        do_ustawienia_koloru.Initialize(Colors.Transparent, 5dip)
        quit.Text = "Close program"
        quit.Background = do_ustawienia_koloru
        do_ustawienia_koloru.Initialize(Colors.Red, 5dip)
        quit.TextColor= Colors.RGB(100,0,0)'do_ustawienia_koloru
        quit.Typeface = Typeface.SANS_SERIF
       
       
        'ustawienie koloru dla klawiszy
        do_ustawienia_koloru.Initialize(Colors.Green, 5dip)'kolor i zaokraglenie rogow
        For licznik_cyfry = 0 To 10
            klawisze(licznik_cyfry).Background = do_ustawienia_koloru
            klawisze(licznik_cyfry).TextColor  = Colors.Black
            klawisze(licznik_cyfry).Tag   = licznik_cyfry + 1           
            klawisze(licznik_cyfry).Text  = licznik_cyfry + 1           
        Next
       
        klawisze(9).Text  = "0" :    klawisze(9).Tag  = 0           
        klawisze(10).Text  = "Clear" :    klawisze(10).Tag  = 11           


    ' Tworzy cos na wzor timerka w VB6
        'tutaj sprawdza pole wpisywania wagi - okresla czas kiedy ma sie odbyc sprawdzanie
        Timer1.Initialize("Timer1", 250) ' 1000 = 1 second
        Timer1.Enabled = True
   
        dens = Density
            If dens = 3 Then
                padding = 3
            End If

            If dens = 1.5 Then
                padding = 2
            End If

            If dens = 1 Then
                padding = 1.7
            End If


' &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
    'Do ustawiania wielkości użyto znaczników procentowych z wysokości i szerokości
    'eliminuje to tworzenie w designerze osobnych layoutów
    'Ustawienie wysokości obiektu
        pierwsza_leg.Height                 = 8%y'wysokosc obiektu
        ponowna_leg.Height                     = 8%y'wysokosc obiektu
'        waga_opakowania.Height                     = 10%y
        quit.Height                         = 10%y
        ' ustalenie wysokosci knefla
        For licznik_cyfry = 0 To 10
            klawisze(licznik_cyfry).height = 15%y
        Next

    'Ustawienie rozmiaru tekstu w obiekcie
        pierwsza_leg.TextSize                 = (pierwsza_leg.Height/padding)/padding'1%y'wielkosc czcionki
        ponowna_leg.TextSize                 = (ponowna_leg.Height/padding)/padding'1%y'wielkosc czcionki
'        waga_opakowania.TextSize            = (waga_opakowania.Height/padding)/padding'1%y
        quit.TextSize                        = (quit.Height/padding)/padding'1%y
        'ustalenie wysokości tekstu
        For licznik_cyfry = 0 To 10
            klawisze(licznik_cyfry).TextSize = (klawisze(licznik_cyfry).Height/padding)/padding
        Next
    'Położenie obiektu względem lewej krawędzi ekranu
        pierwsza_leg.Left                 = 1%x 'polozenie od lewej
        ponowna_leg.Left                 = 1%x 'polozenie od lewej
'        waga_opakowania.Left             = 1%x
        quit.Left                         = 1%x
       
        'ustawienie klawiszy 1,4,7
        klawisze(0).Left    = 1%x
        klawisze(3).Left    = 1%x
        klawisze(6).Left    = 1%x       
       
        'ustawienie klawiszy 2,5,8,0
        klawisze(1).Left    = 35%x
        klawisze(4).Left    = 35%x
        klawisze(7).Left    = 35%x
        klawisze(9).Left    = 35%x
       
        'ustawienie klawiszy 3,6,9,czyszczenie
        klawisze(2).Left    = 69%x
        klawisze(5).Left    = 69%x
        klawisze(8).Left    = 69%x
        klawisze(10).Left    = 69%x
   
   
    'Ustawienie szerokości obiektu na ekranie
        pierwsza_leg.Width                 = 100%x - (2 * pierwsza_leg.Left)'taki zapis ustawii zawsze obiekt na środku
        ponowna_leg.Width                 = 100%x - (2 * ponowna_leg.Left)'ekranu, i będzie miał takie same proporcje
'        waga_opakowania.Width             = 48%x
        quit.Width                         = 98%x
   
        For licznik_cyfry = 0 To 10
            klawisze(licznik_cyfry).Width = 30%x
        Next
   
    'polozenie od gory
        pierwsza_leg.Top                 = 1%y
        ponowna_leg.Top                 = pierwsza_leg.Top + pierwsza_leg.Height + 1%y 'polozenie od gory
'        waga_opakowania.Top                = ponowna_leg.Top + ponowna_leg.Height + 5%y
        quit.Top                         = 100%y - quit.Height
   
        'ustawienie klawiszy 1,4,7
        klawisze(0).top    = ponowna_leg.Top +ponowna_leg.Height + 5%x
        klawisze(1).top    = ponowna_leg.Top +ponowna_leg.Height + 5%x
        klawisze(2).top    = ponowna_leg.Top +ponowna_leg.Height + 5%x       
       
        'ustawienie klawiszy 2,5,8,0
        klawisze(3).top    = klawisze(0).top + klawisze(0).Height + 4%x
        klawisze(4).top    = klawisze(0).top + klawisze(0).Height + 4%x
        klawisze(5).top    = klawisze(0).top + klawisze(0).Height + 4%x
       
        'ustawienie klawiszy 3,6,9,czyszczenie
        klawisze(6).top    = klawisze(3).top + klawisze(3).Height + 4%x
        klawisze(7).top    = klawisze(3).top + klawisze(3).Height + 4%x
        klawisze(8).top    = klawisze(3).top + klawisze(3).Height + 4%x
        klawisze(9).top    = klawisze(6).top + klawisze(6).Height + 4%x
        klawisze(10).top= klawisze(6).top + klawisze(6).Height + 4%x
       
       
    'polozenie tekstu w komórkach   
        pierwsza_leg.Gravity= Gravity.CENTER_HORIZONTAL + Gravity.CENTER_VERTICAL
        ponowna_leg.Gravity= Gravity.CENTER_HORIZONTAL + Gravity.CENTER_VERTICAL
       
        ponowna_leg.Typeface = Typeface.DEFAULT_BOLD
       
        For licznik_cyfry = 0 To 10
            klawisze(licznik_cyfry).Gravity= Gravity.CENTER_HORIZONTAL + Gravity.CENTER_VERTICAL
        Next
        licznik_cyfry =0
    'ustawienie jaka klawiatura ma sie pojawic po kliknieciu pola wpisywania wagi
    'waga_opakowania.InputType = waga_opakowania.INPUT_TYPE_NUMBERS
       
'__________________________________________________________________________


End Sub


Sub Timer1_Tick' obsługa timera, przerwania od niego
    Dim wpisana_waga As Int
    ' w tym warunku sprawdzam czy wpisano cyfre, czy pole jest puste, inaczej sie apka wywala
    If cala_liczba = "" Then
        wpisana_waga = 0 ' wstawienie zera, zeby dobrze liczylo
        dop_odch_std_pierwsze = 0
    '    dop_odch_std_kolejne  = 0
    Else
        wpisana_waga = cala_liczba 'jest wpisana jakas liczba, wiec ja przepisujemy do wyliczen
    End If
   
   
    ' sprawdzenie w jakim przedziale jest wpisana waga i wyliczenie odchylenia
    '------- Przedział wagowy do 50GR ---------------
    If wpisana_waga >= 1 AND wpisana_waga <= 50 Then
        dop_odch_std_pierwsze = wpisana_waga * 0.0048
    '    dop_odch_std_kolejne  = wpisana_waga * 0.006
    End If
    '----- Przedział wagowy od 51GR do 100GR ---------
    If wpisana_waga >= 51 AND wpisana_waga <= 100 Then
        dop_odch_std_pierwsze = 0.24
    '    dop_odch_std_kolejne  = 0.3
    End If   
    '----- Przedział wagowy od 101GR do 200GR ---------
    If wpisana_waga >= 101 AND wpisana_waga <= 200 Then
        dop_odch_std_pierwsze = wpisana_waga * 0.0024
    '    dop_odch_std_kolejne  = wpisana_waga * 0.003
    End If   
    '----- Przedział wagowy od 201GR do 300GR ---------
    If wpisana_waga >= 201 AND wpisana_waga <= 300 Then
        dop_odch_std_pierwsze = 0.48
    '    dop_odch_std_kolejne  = 0.6
    End If   
    '----- Przedział wagowy od 301GR do 500GR ---------
    If wpisana_waga >= 301 AND wpisana_waga <= 500 Then
        dop_odch_std_pierwsze = wpisana_waga * 0.0016
        'dop_odch_std_kolejne  = wpisana_waga * 0.002
    End If   
    '----- Przedział wagowy od 501GR do 1000GR ---------
    If wpisana_waga >= 501 AND wpisana_waga <= 1000 Then
        dop_odch_std_pierwsze = 0.8
    '    dop_odch_std_kolejne  = 1
    End If   
    '----- Przedział wagowy od 1001GR do 10000GR ---------
    If wpisana_waga >= 1001 AND wpisana_waga <= 10000 Then
        dop_odch_std_pierwsze = wpisana_waga * 0.0008
    '    dop_odch_std_kolejne  = wpisana_waga * 0.001
    End If   
    '----- Przedział wagowy od 10001GR do 15000GR ---------
    If wpisana_waga >= 10001 AND wpisana_waga <= 15000 Then
        dop_odch_std_pierwsze = 8
    '    dop_odch_std_kolejne  = 10
    End If   
    '----- Przedział wagowy od 15001GR ---------
    If wpisana_waga >= 15001 Then
        dop_odch_std_pierwsze = wpisana_waga * 0.00053
    '    dop_odch_std_kolejne  = wpisana_waga * 0.00067
    End If   
   
   
    ' Wypisanie/wyswietlenie wyliczen
    '    pierwsza_leg.Text = "Pierwsza legalizacja : " & NumberFormat(dop_odch_std_pierwsze,1,3) & "gr" 'formatowanie wyswietlania wyniku w formie 0.00
    '    ponowna_leg.Text = "Ponowna legalizacja  : " & NumberFormat(dop_odch_std_kolejne,1,3) & "gr"'formatowanie wyswietlania wyniku w formie 0.00
       
        If cala_liczba = "" Then
            pierwsza_leg.Text = "Product weight : " & "0g"
        Else       
            pierwsza_leg.Text = "Product weight : " & cala_liczba & "g"
        End If
        ponowna_leg.Text =  "Max. std. dev.: " & NumberFormat(dop_odch_std_pierwsze,1,3) & "g" '& Chr(10) & Chr(13) & "Max. odch. std. produkcja: " & NumberFormat(dop_odch_std_kolejne,1,3) & "g"
   'Handle tick events
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Quit_Click
    Timer1.Enabled = False
    ExitApplication
End Sub


Sub klawisze_Click
    Dim wcisnieto_knefel As Button
    wcisnieto_knefel = Sender

    If wcisnieto_knefel.Tag = 11 Then 'jesli 10, wcisnieto czyszczenie
        cala_liczba = ""
    Else
        cala_liczba = cala_liczba & wcisnieto_knefel.Tag
        If cala_liczba > 50000 Then
            cala_liczba = 50000
        End If
       
    End If
   
       
End Sub

' Obsługa klawiszy
'Sub ekran_w_lewo_Click
    'StartActivity(Wyliczenia_detektory)
    'Activity.LoadLayout("Wiliczenia_detektory")'zaladowanie ekranu z designera
'End Sub

Many thanks for any reply and help.
 

Erel

B4X founder
Staff member
Licensed User
Longtime User
All buttons and labels are defined manually, without using designer.
I done this, to have autoscalling for different screens.
This is a mistake. The designer will help you implement a flexible layout.

B4X:
 dens = Density
If dens = 3 Then
 padding = 3
EndIf
If dens = 1.5 Then
 padding = 2
EndIf
If dens = 1 Then
 padding = 1.7
EndIf
I don't know if this is the error with the fonts but there could many other values for Density.
 
Upvote 0

Lukasz

New Member
Licensed User
Longtime User
Hi Erel,

Thank You for your help.
Removed the padding, and scale the text size using height of desired object and divide it by some value - it works, I see labels on buttons and other texts.

Best Regards, Lukasz.
 
Upvote 0
Top